Web API 2自定义控制器方法.路由问题

本文关键字:方法 路由 问题 控制器 自定义 API Web | 更新日期: 2023-09-27 18:12:26

这是我的Global.asmx

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);            
    }
}
这是我的WebApiConfig类。
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

这是我的ApiController

public class HelloController : ApiController
{
    public string Get()
    {
        return "get method";
    }
    [Route("SayHello")]
    public string SayHello()
    {
        return "Hello Jim";
    }
}

如果我浏览到http://localhost:52072/api/hello/get,那么我将按照预期收到"get方法"。

如果我浏览到http://localhost:52072/api/hello/SayHello,那么它与404 not found错误。

任何想法?

Web API 2自定义控制器方法.路由问题

来源:ASP中的属性路由。. NET Web API 2

更新路线

public class PaymentController : ApiController {
    public string Get() {
        return "get method";
    }
    //GET api/payment/SayHello
    [HttpGet]    
    [Route("api/payment/SayHello")]
    public string SayHello() {
        return "Hello Jim";
    }
}

也可以使用路由前缀

[RoutePrefix("api/payment")]
public class PaymentController : ApiController {
    //GET api/payment/Get
    [HttpGet]
    [Route("Get")]
    public string Get() {
        return "get method";
    }
    //GET api/payment/Sayhello
    [HttpGet]
    [Route("SayHello")]
    public string SayHello() {
        return "Hello Jim";
    }
}

设置属性路由匹配您的请求url,并且您需要在方法名称中前缀Get或需要在方法之前放置[HttpGet]注释

[HttpGet]
[Route("api/payment/SayHello")]
public string SayHello()
{
   return "Hello Jim";
}

或重命名方法名并在其前面加上前缀Get

[Route("api/payment/SayHello")]
public string GetSayHello()
{
   return "Hello Jim";
}