【问题标题】:Route is not triggered with trailing slash in web api 2Web api 2 中的斜杠不会触发路由
【发布时间】:2017-10-23 15:15:32
【问题描述】:

这是我的路线配置:

 config.Routes.MapHttpRoute(
                name: "Public",
                routeTemplate: "{dept}/{unit}/",
                defaults: new
                {                    
                    controller = "Home",
                    action = "Index"                
                },
               constraints: new { constraint = new MyConstraint() }

            );

当我输入网址时:

mysite.com/XYZ/123

然后我的约束类被触发

但是当我使用时:

mysite.com/XYZ/123/ 附加斜线不会触发约束类。

我使用 Web Api 2。

在 routeTemplate 中,我可以在末尾使用“/”,也可以不使用。

为什么它不起作用?

更新

public class HomeController : ApiController
{

[HttpGet]
public HttpResponseMessage Index()
{

}

}

【问题讨论】:

  • 你也可以展示一下你的控制器吗?
  • 我用信息更新了我的问题。
  • 我已经复制了您的控制器和路由模板(约束除外),我没有遇到您的问题。它必须是约束。你能分享一下你正在使用的确切路径吗?
  • 你说的路径是什么?我使用的测试网址发布在上面:-)
  • 好吧,您使用“/XYZ/123”映射到家庭控制器似乎很奇怪。可以显示约束代码吗?

标签: asp.net asp.net-web-api asp.net-web-api2 asp.net-web-api-routing


【解决方案1】:

我已经更新了我的答案:

试试属性路由:

[RoutePrefix("dept")]
 public class DepartmentController : ApiController
{
   [Route("unit:int:min(1)"}]
   public object Unit() {}
}

可以像上面那样设置约束。更多:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#constraints

【讨论】:

  • 对不起,我不明白你的解决方案。我应该具体改变什么?
  • 我刚刚测试了自己的web api,尾部斜杠不影响路由。但是,这适用于使用属性创建的路由。我看到您正在使用约束,所以这可能会产生影响。
  • 对不起,属性路由对我来说不是替代品。
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多