【发布时间】:2015-05-13 13:47:51
【问题描述】:
我有这个控制器:
public class SeguiAttivazioneController : ApiController
{
[HttpGet]
public IHttpActionResult DoWork1()
{
...
return Ok();
}
[HttpGet]
public IHttpActionResult DoWork2()
{
...
return Ok();
}
[HttpGet] //I would like to have a search with GET verb, but I cannot validate my ModelState with dataAnnotation
public IHttpActionResult AnotherSearch(string filter1, string filter2, ...)
{
if (ModelState.IsValid)
{
...
return Ok();
}
return BadRequest(ModelState);
}
[HttpPost]
public IHttpActionResult DoSearch(SearchFilter filters)
{
if (ModelState.IsValid)
{
...
return Ok();
}
return BadRequest(ModelState);
}
[HttpPost]
public IHttpActionResult SubmitForm(FormData data)
{
...
return Ok();
}
}
如您所见,我有两种具有相同 HttpVerbs 的方法(2 个用于 GET,2 个用于 POST)...我不知道我是否违反了 REST 原则...如果是这样,我想避免... . 在这一刻,我正在使用 AngularJs + NgResources 来调用我的 Controller..
public_area
.factory("SeguiAttivazioneService", function ($resource) {
//return {
// seguiAttivazione: $resource("/api/SeguiAttivazione/", null,
// {
// 'get2': { method: 'GET', url: '/api/SeguiAttivazione/GetActivationStatus2' }
// })
//};
return {
seguiAttivazione: $resource("/api/SeguiAttivazione/")
};
});
我正在尝试做一个 GET:
$scope.getActivationStatus = function (event) {
event.preventDefault();
if ($scope.segui_attivazione_form.$valid) {
var request =
new SeguiAttivazioneService
.seguiAttivazione()
.$get({ }, getActivationStatusSuccess, getActivationStatusError);
}
};
但是(正确地)我得到一个“内部服务器错误 500”,因为我必须使用 GET 方法。我怎么解决这个问题? (我想我也会遇到同样的问题)
谢谢
更新 这里是过滤器的类
public class SearchFilter
{
[Required(ErrorMessage="")]
public string CodiceFiscale { get; set; }
[Required(ErrorMessage = "")]
[RegularExpression(@"^(?:\d{11,16})|(?:[a-zA-Z]{6}[a-zA-Z0-9]{2}[a-zA-Z][a-zA-Z0-9]{2}[a-zA-Z][a-zA-Z0-9]{3}[a-zA-Z])$", ErrorMessage = "Codice Fiscale o Partita IVA non validi")]
public string CodiceRichiesta { get; set; }
}
有了这个类,我可以使用数据注释来验证我的模型......如果我使用 GET 方法,我将无法再使用数据注释验证......
【问题讨论】:
-
REST 端点应该具有歧视性。看看这篇维基百科文章的例子(可能不是最好的来源,但例子很好)en.wikipedia.org/wiki/Representational_state_transfer。 URI 上的方法在您的后端应该只有一个入口点
-
所以你的意思是我应该只有一个 GET 和一个 POST?
-
对于 URI 端点是的。我将尝试对 REST Uri 做一个简短的回答
-
Simone,我想我回答了你原来的问题。如果现在您对使用数据注释进行验证有不同的问题,请不要在您当前的问题中混淆。创建一个新问题,您现在可以在其中解释您想要做什么。这将使某人更有可能回答它。我脑子里有一些想法,但你的问题并不清楚。请清楚地解释新的风景,并明确这篇文章的任何答案是否回答了您的原始问题。谢谢。
标签: angularjs rest asp.net-web-api2 ngresource