[英]ASP.NET Web API 2 Setting Controller Routes
由于无法弄清楚代码中的错误,我整天都在挠头。
首先,我有一个工作的控制器,例如:
namespace MyProject.Controllers {
[RoutePrefix("api/Account")]
public class AccountController : ApiController {
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(AccountModel model) {
...
return Ok();
}
}
}
但是,当我添加新的控制器并引入新的路由时,就会出现问题。
新的控制器如下:
namespace MyProject.Controllers {
[RoutePrefix("api/Admin")]
public class AdminController : ApiController {
[AllowAnonymous]
[Route("Encrypt")]
public IHttpActionResult Encrypt(string clientSecret) {
...
return Ok();
}
}
}
然后我通过邮递员发出这样的请求:
不幸的是,返回了一个错误:
{
"message": "No HTTP resource was found that matches the request URI 'http://localhost/api/admin/encrypt'."
}
我正在使用WebApiConfig.cs
定义的默认路由映射配置:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
任何人都可以阐明它吗?
如果以这种方式发送POST请求,则可以成功获取Ok()
响应。
我现在有一个问题。 为什么我只能通过URL传递参数,而不能通过表单对象传递参数?
我建议您更改路由定义:api / {controller} / {action} / {id}
imo的原因是,Web api操作默认为标准接受动词。 然后,您可以以任何方式命名您的api操作方法,仅用相关的accept属性装饰它们。
要使用参数进行调用,请在route属性中包含parameter并添加POST动词,如下所示:
[Route("Encrypt/{clientSecret}")]
[HttpPost]
public IHttpActionResult Encrypt(string clientSecret) {
...
return Ok();
}
然后调用如下:
http://localhost/api/admin/encrypt/123456
但是,post方法的约定没有以下参数:
[Route("Encrypt")]
[HttpPost]
public IHttpActionResult Encrypt() {
...
return Ok();
}
}
然后调用如下:
http://localhost/api/admin/encrypt
如果您不想添加POST动词,则可以使用POST动词为方法添加前缀,如下所示:
public IHttpActionResult PostEncrypt(string clientSecret)
public IHttpActionResult PostEncrypt()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.