查询字符串的属性路由

C S*_*per 6 .net c# asp.net-web-api asp.net-web-api-routing

我有以下路线网址:-

www.domanname.com/subroute/GetInfo?param1=somestring&param2=somestring
Run Code Online (Sandbox Code Playgroud)

我在 webapi 中有如下功能:-

public class HomeController : ApiController
{
    public object GetInfo(string param1,string param2)
    {}
}
Run Code Online (Sandbox Code Playgroud)

申请路线:-

[RoutePrefix("subroute")]
public class HomeController : ApiController
{
    [Route("GetInfo?param1={param1:string}&param2={param2:string}")]
    public object GetInfo(string param1,string param2)
    {}
}
Run Code Online (Sandbox Code Playgroud)

但在申请上述网址后:-

public class HomeController : ApiController
{
    public object GetInfo(string param1,string param2)
    {}
}
Run Code Online (Sandbox Code Playgroud)

找不到那个网址

我该如何设计这条特定的路线?

Nko*_*osi 4

您需要稍微修改一下路由,因为属性路由中通常不使用查询字符串。它们往往用于内联路由参数。

[RoutePrefix("subroute")]
public class HomeController : ApiController {
    //Matches GET subroute/GetInfo?param1=somestring&param2=somestring
    [HttpGet]
    [Route("GetInfo")]
    public IHttpActionResult GetInfo(string param1, string param2) {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

启用属性路由

要启用属性路由,请MapHttpAttributeRoutes在配置期间调用。该扩展方法是在System.Web.Http.HttpConfigurationExtensions类中定义的。

using System.Web.Http;

namespace WebApplication
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();

            // Other Web API configuration not shown.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

参考ASP.NET Web API 2 中的属性路由