ASP.NET MVC 4 中的 Web Api 中的路由

2024-03-24

我正在将 Web api 与 ASP.NET MVC 4 结合使用。

我有以下命名的控制器

  • 客户控制器:控制器
  • 客户 ApiController : ApiController

早些时候我的CustomerApiController被命名为CustomersController所以要访问它,我只需输入以下网址即可

本地主机/api/客户

但现在我必须将 api 控制器名称保留为CustomerApiController。我希望能够使用相同的方法localhost/api/Customers我必须做出什么改变?

我尝试过做一些改变RouteConfig.cs文件。我尝试将以下内容添加到 RegisterRoutes 方法中,但没有一个起作用。

routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

routes.MapRoute(
            name: "Customers",
            url: "api/customer/",
            defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional }
        );

请有人指导我这一点。谢谢


那么您的代码中有两个问题。您正在使用 MapRoute 而不是 MapHttpRoute。您还应该将更详细的路线放在第一位,这样它就不会被更通用的路线吞没:

routes.MapHttpRoute(
    name: "Customer",
    url: "api/Customer/{id}",
    defaults: new { controller = "CustomerApi", action = "Get", id = UrlParameter.Optional }
); 

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

现在,如果您希望您的解决方案更加通用(当您有更多需要像这样修改的控制器时),您可以使用自定义HttpControllerRouteHandler转换传入控制器名称,这样您将能够保留默认路由。

首先您需要创建自定义HttpControllerRouteHandler:

public class CustomHttpControllerRouteHandler : HttpControllerRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString() + "Api";

        return base.GetHttpHandler(requestContext);
    }
}

现在你可以像这样注册你的 HttpRoute:

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
).RouteHandler = new CustomHttpControllerRouteHandler();

这样当你把Customer引擎会将其视为 URL客户API.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 4 中的 Web Api 中的路由 的相关文章

随机推荐

  • C# 逐字字符串换行符:CRLF、CR 或 LF?

    我今天遇到了一个有趣的问题 我的测试在构建机器上始终失败 而即使使用相同的配置 它们在我的机器上运行得很好 当我查看故障转储中 Assert AreEqual 输出的差异时 我看不到任何不同 经过一系列调查后 我发现测试用例源代码中的逐字字
  • Common Lisp 中的 LET 与 LET*

    我理解 LET 和 LET 并行绑定与顺序绑定 之间的区别 并且作为理论上的问题 它非常有意义 但有没有什么情况你曾经真正需要过 LET 在我最近查看的所有 Lisp 代码中 您可以将每个 LET 替换为 LET 而无需进行任何更改 编辑
  • 酒吧升级降级了我的主包

    这是我的依赖项列表 dependencies browser any polymer any polymer elements any angular any lawndart any validate any http utils any
  • 如何使用c#在现有的word文档中插入图像

    我正在与word and c 使用我的代码拍摄快照并将其保存在特定文件夹中 例如 C Temp 现在我想将图像保存到现有的 Word 文档中 非常感谢任何有关简短代码示例的帮助 会更喜欢使用Microsoft Office Interop
  • 如何在给定的文本片段中找到匹配括号或大括号的位置?

    许多文本编辑器和 IDE 都有一项功能 当光标放置在其中一对中的开始或结束字符上时 会突出显示匹配的括号 方括号或大括号 给定文本文件中左括号或右括号的位置 使用什么算法来查找匹配括号的位置 请记住 这些字符可以嵌套 因此只需向前或向后扫描
  • 关于创建包含按钮的图库视图的问题?

    我创建了一个包含按钮的图库 示例代码如下 public class Adapter extends BaseAdapter private Context mContext public ImageAdapter Context c mCo
  • 如何在 Bootstrap 下拉悬停上添加延迟

    我正在尝试为引导下拉菜单添加延迟 我已经添加了 css 以使下拉列表在悬停时显示 你可以在这里测试一下http www bootply com YcVBzvXqrR http www bootply com YcVBzvXqrR 这是我的
  • 如何在ios中写入json文件

    这里我正在读取和写入一个 json 文件 读取正确 但当我写入文件时 它不会在 json 文件中写入数据 这是我的代码 reading Json file NSString filePath NSBundle mainBundle path
  • apache mysql - 3306 上的“数据包乱序”

    我刚刚全新安装了 Apache 服务器 2 2 一切正常 当我访问本地主机时 我得到 它有效 我刚刚安装了 mySQL5 5 当我访问 localhost 3306 时 我只是得到乱码 J 5 5 22 4 LM D p 6 I 4 9z
  • 对象适配是否会破坏 Chrome 中的某些图像长宽比?

    I m using object fit cover on some IMG tags within a wrapper div to try to fill a div with the image I ve noticed that s
  • 密码输入字段在焦点/类型上从文本更改为密码?

    我有一个注册表单 其中输入的标题位于文本框中 当您单击该框时 文本消失 但在密码上我希望预览文本保留为 密码 而不是 但是当用户单击文本框时应清除文本 并且输入的文本应显示为 这是按钮的代码
  • 如何生成从最短到最长的所有可能字符串的列表

    我需要使用数字和字母生成无限的字符串列表 第一个字符串应该只是 a 然后是 b 到 z 然后是 0 到 9 然后是 aa ab 等 我可以轻松地用一个字符生成那些 但随后它会变得更加复杂 因此 假设我们已经有了所有可能字符串的列表 allS
  • Apache + mod_wsgi - Python 不加载已安装的模块

    我有一个带有 mod wsgi 的 Apache 服务器 运行 Python 2 7 脚本 该脚本使用通过 pip 安装的 python Pillow 模块 通常使用运行脚本python script py工作正常 但从 wsgi 运行脚本
  • 使用自定义属性创建有效的站点地图

    我正在一个网站上工作 我的网站有一个 sitemap xml 文件 该文件可以看到here http www ecofic com resources root sitemap xml 如果你向下滚动 你会看到一个url包含一些自定义标签的
  • Git hook 用于根据推送到远程服务器的分支更新各种 Web 文件夹

    我正在使用 Gitosis Debian Lenny 开发一个 Web 应用程序 我希望能够将其推送到不同的远程存储库 位置 从而允许应用程序的 前沿 发布候选 和 生产 版本镜像物理 Web 目录和代码库 我希望每个目录都有一个应用程序分
  • 使用纯 Observable 与数组(来自订阅)

    我想知道有关使用纯可观察值与订阅可观察值并使用数组的最佳实践 选项 1 纯可观察 this schools this angularFire database list schools 然后在 HTML 中使用异步管道 和 rxjs 运算符
  • 替换 JS 中的变音符号

    我正在比较字符串 并且必须替换 JS 中的变音符号 但 JS 似乎无法识别字符串中的变音符号 文本来自数据库 在浏览器中变音确实显示得很好 function replaceUmlauts string value string toLowe
  • 如何在C#中实现内存事务范围?

    我们有一个缓存 我想在其中放置一些事务范围 以便任何进程都必须显式 提交 它想要对缓存对象执行的更改 并且可以在进程中途失败时回滚任何更改 现在 我们正在根据 get 请求深度克隆缓存的对象 它可以工作 但它不是一个干净的解决方案 并且还涉
  • ASP.NET - bin 目录与在 web.conf 中添加程序集

    我对 ASP NET 编程相对较新 但不是一般的编程 并且我一直在研究移交给我的一个项目 在这个项目中 有一个 bin 目录 其中包含大量各种 DLL 文件 然后 在 web conf 文件中的程序集结构内 在 XML 内 添加了大量其他程
  • ASP.NET MVC 4 中的 Web Api 中的路由

    我正在将 Web api 与 ASP NET MVC 4 结合使用 我有以下命名的控制器 客户控制器 控制器 客户 ApiController ApiController 早些时候我的CustomerApiController被命名为Cus