如何在 ASP.NET Web API 中指定控制器的名称?

Posted

技术标签:

【中文标题】如何在 ASP.NET Web API 中指定控制器的名称?【英文标题】:How can I specify the name of the controller in ASP.NET Web API? 【发布时间】:2012-08-18 07:20:48 【问题描述】:

我有一个 ApiController,很简单,像这样:

public class AssetController : ApiController

// removed for brevity

当我从视图插入到它的路由时,创建的 url 类似于:

http://host/Asset

但我想自定义名称,让它变成这样:

http://host/assets

如何在不使用完整的自定义路由表的情况下为控制器指定自定义名称?

【问题讨论】:

为了使它变成小写...你检查过这个答案 ***.com/questions/878578/… 和 ***.com/questions/6168270/… 吗?他们倾向于在这里lowercaseroutesmvc.codeplex.com 签出部分指向 CodePlex 项目:(第 4 步。(如果使用 ASP.NET Web API)-重新映射您的 HTTP) 谢谢,我一直在看,我一直在浏览源代码,但找不到任何对我有帮助的东西。我认为今天唯一的出路是自定义路由表。 我更新了问题正文,使其更加清晰。 【参考方案1】:

我必须解决这个问题,所以我选择调整我的路由表以反映我真正想要的 API。

【讨论】:

【参考方案2】:

我建议查看https://github.com/mccalltd/AttributeRouting 库。它通过在每个函数上放置一个属性并给它一个特定的路由(可以是任何东西)来很好地处理这个方面。

【讨论】:

【参考方案3】:

当我从视图插入到它的路由时,创建的 url 类似于:http://host/Asset

你还没有真正展示你是如何做到这一点的插入,但以下应该可以正常工作:

@Url.RouteUrl("DefaultApi", new  httproute = "false", controller = "assets" )

如果你想要一个绝对网址,你可以将协议方案指定为第三个参数:

@Url.RouteUrl("DefaultApi", new  httproute = "false", controller = "assets" , "http")

为了遵守 RESTFul 约定,您应该将控制器重命名为 AssetsController

【讨论】:

有人帮忙,谢谢。它确实让我重命名我的控制器以影响名称。我正在尝试使用复数名称的 RESTFul 约定,但我不明白这应该是控制器的关注点。 在约定方面是控制器的关注点。这就是 ASP.NET MVC 路由的工作原理。所以请遵循这些约定。

以上是关于如何在 ASP.NET Web API 中指定控制器的名称?的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义位置时如何在 asp.net core mvc 中指定视图位置?

如何在 ASP.NET 用户控件中指定 *.css 文件?

我的数据库系统找不到在 asp.net 中指定的文件

在 asp.net core rc2 中指定代理

如何在 Android 中指定 Spotify Web API 的国家代码?

过程或函数在 ASP.NET C# 中指定的参数过多