![](/img/trans.png)
[英]Adding an explicit action route to ASP.NET Web API Controller
[英]ASP.NET Web API Route Controller Not Found
我想发布到以下Web API:
http://localhost:8543/api/login/authenticate
LoginApi(Web API)定义如下:
[RoutePrefix("login")]
public class LoginApi : ApiController
{
[HttpPost]
[Route("authenticate")]
public string Authenticate(LoginViewModel loginViewModel)
{
return "Hello World";
}
}
WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
这是我得到的错误:
Request URL:http://localhost:8543/api/login/authenticate
Request Method:POST
Status Code:404 Not Found
Remote Address:[::1]:8543
您的控制器名称“LoginApi”需要以“Controller”结尾,以便框架找到它。 例如:“LoginController”
这篇文章解释了ASP.NET Web API中的路由: http : //www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
您正在控制器上使用login
作为路由前缀,因此尝试呼叫
http://localhost:8543/api/login/authenticate
将不会被发现为此代码
[RoutePrefix("login")]
public class LoginApi : ApiController
{
//eg:POST login/authenticate.
[HttpPost]
[Route("authenticate")]
public string Authenticate(LoginViewModel loginViewModel)
{
return "Hello World";
}
}
只会工作
http://localhost:8543/login/authenticate
您需要将路由前缀更改为
[RoutePrefix("api/login")]
public class LoginApi : ApiController
{
//eg:POST api/login/authenticate.
[HttpPost]
[Route("authenticate")]
public string Authenticate(LoginViewModel loginViewModel)
{
return "Hello World";
}
}
请注意,您正在使用config.Routes.MapHttpRoute在控制器/操作和约定路由上使用属性路由。
config.Routes.MapHttpRoute将根据您的定义“ api/{controller}/{id}
”映射路由。
属性路由时,将根据您的定义方式映射路由: /login/authenticate
。
此外,由于您同时使用属性路由和约定路由,因此属性路由会占用优先级。 我会坚持使用其中一个。 两者都会增加一些关于将用于访问动作方法的路线的混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.