簡體   English   中英

找不到ASP.NET Web API路由控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM