【问题标题】:Attribute Routing for querystring查询字符串的属性路由
【发布时间】:2018-10-24 01:44:25
【问题描述】:

我有以下路由 URL:-

www.domanname.com/subroute/GetInfo?param1=somestring&param2=somestring

我在 webapi 中有如下功能:-

public class HomeController : ApiController
{
    public object GetInfo(string param1,string param2)
    {}
}

申请路线:-

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

但在应用上述网址后:-

www.domanname.com/subroute/GetInfo?param1=somestring&param2=somestring

找不到那个网址

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

【问题讨论】:

  • [Route("GetInfo?param1={param1:string}&param2={param2:string}")] 替换为[Route("GetInfo")]。您不需要将查询参数放入路由中。
  • 路由由网卡上的IP地址和掩码决定。 IP 路由由具有更具体掩码的 Route 确定。因此,在 255.255.0.0 的掩码之前使用 255.255.255.0 的掩码。所以你需要修改网卡的掩码。使用 cmd.exe > IPCONFIG /ALL 确定当前设置。

标签: c# .net asp.net-web-api asp.net-web-api-routing


【解决方案1】:

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

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

还有

启用属性路由

要启用属性路由,请在配置期间调用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.
        }
    }
}

参考Attribute Routing in ASP.NET Web API 2

【讨论】:

  • 抱歉,404 有这个:- 没有找到与请求 URI 匹配的 HTTP 资源
  • @CSharper 你在 WebApiConfig.cs 中启用了属性路由吗?
  • config.MapHttpAttributeRoutes(); WebApiConfig中有没有
  • 感谢这在做了一些更改后有效,我以错误的方式调用 url :)
【解决方案2】:
[RoutePrefix("subroute")]
public class HomeController : ApiController {
    [HttpGet]
    [Route("GetInfo/{param1}/{param2}")]
    public IHttpActionResult GetInfo(string param1, string param2) {
        //...
    }
}

通话

//Matches GET subroute/GetInfo/Hello/World

【讨论】:

  • 刚刚编辑了我的答案,请发送网址,你是怎么打电话的?
  • 但是我的网址是固定的,我需要相应地调整我的路线
  • 好的 @CSharper 但在 api/mvc 中使用查询字符串并不是一个好方法。如果是网页形式,那就没问题了。谢谢
猜你喜欢
  • 2014-05-28
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2017-01-26
  • 2015-09-04
相关资源
最近更新 更多