c# - 如何在 Web API 中支持空 RouteAttribute?

标签 c# asp.net asp.net-mvc-4 asp.net-web-api asp.net-web-api-routing

我有这门课:

[RoutePrefix("api/v2/Foo")]
public class SomeController : BaseController
{
    [Route("")]
    [HttpGet]
    public async Task<HttpResponseMessage> Get(SomeEnum? param)
    {
        //...
    }
}

我想通过以下方式调用它: api/v2/Foo?param=Bar 但它不起作用。

如果我这样更改路由属性以在 RouteAttribute 中包含一些内容:

    [Route("SomeRoute")]
    [HttpGet]
    public async Task<HttpResponseMessage> Get(SomeEnum? param)
    {
        //...
    }

...然后我可以调用 api/v2/Foo/SomeRoute?param=Bar ,但这不是我想要的。

如何让第一种情况起作用?

编辑: Domas Masiulis 引导我找到了答案:上面的场景确实有效,只是默认的全局路由把事情搞砸了。我通过添加符合我们惯例的单独默认路由解决了这个问题...

    public static void RegisterRoutes(RouteCollection routes)
    {
        //ADDING THIS FIXED MY ISSUE
        routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/v2/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        //SOURCE OF THE ORIGINAL PROBLEM
        routes.MapRoute(
           "Default", // Route name
           "{controller}/{action}/{id}", // URL with parameters
           new { controller = "Administration", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       );
    }

最佳答案

有什么特殊条件吗?也许隐藏在 BaseController 中? RouteConfig 有自定义配置吗?

你给出的例子对我有用,做了一个快速测试:

使用代码:

[RoutePrefix("api/v2/Foo")]
public class SomeController : ApiController
{
    [Route("")]
    [HttpGet]
    public Task<int> Get(int param)
    {
        return Task.FromResult(2);
    }
}

呼唤 http://localhost:1910/api/v2/Foo?param=1按预期工作 - 返回 2。

关于c# - 如何在 Web API 中支持空 RouteAttribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31661101/

相关文章:

c# - 通过 IPv6 获取远程 MAC 地址

c# - 基于 OData/Web API 的 .Net 项目的解决方案架构

c# - 如何刷新图像的浏览器缓存?

c# - 为什么我得到 "Cannot resolve symbol ' CreatePerOwinContext'”?

jquery - 如何使用 ASP.NET MVC 手动启用 jQuery 验证

asp.net - 在 IIS7 中访问图像时出现 500 内部服务器错误

c# - C# 中 AES 256 位加密 key 大小的问题

c# - Resharper 将我的 NUnit 测试标记为未使用

javascript - 找出使用 Javascript 进行了哪些按钮更改?

iis - ServerManager 构造函数在测试环境中崩溃