【问题标题】:Is it possible to define a Web Api Route which accepts a literal?是否可以定义一个接受文字的 Web Api 路由?
【发布时间】:2012-04-18 04:34:52
【问题描述】:

我为 Web Api 定义了一个路由如下

 routes.MapHttpRoute(
                name: "SearchApi",
                routeTemplate: "api/search/{controller}-{seopath}",
                defaults: new { seopath = RouteParameter.Optional }
            );

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

但是,当我从 Visual Studio 运行它并转到 http://localhost:50356/api/search/jobs-in-Bangalore 时,我收到 404 错误消息“找不到与名为 'jobs-in' 的控制器匹配的类型”。

在书中,Professional Asp.Net MVC 1.0, pg 207 {title}-{author} 是作为有效路由 url 给出的,那么为什么将“jobs-in”解释为控制器而不是“jobs”?

【问题讨论】:

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


    【解决方案1】:

    显然匹配是贪婪的。为什么不定义你的路线:

    routeTemplate: "api/search/{controller}/{seopath}"
    

    【讨论】:

    • 好吧,我们在旧的 webforms 网站中有一个 hacky 方式,其中诸如“site.com/jobs-in-bangalore”之类的 url 被映射到具有某些查询字符串参数的特定页面。例如“jobs-in-bangalore”将映射到“search.aspx?City=Bangalore” 这些 url 出现在搜索引擎结果中,所以如果只支持这种格式就很好了。但这似乎无论如何都不可能?
    • 如果您想维护现有的 SEO URI,您可以编写自定义路由约束(参见 stephenwalther.com/blog/archive/2008/08/07/… 示例)或者您可以使用 IIS 的 URL 重写 (iis.net/download/urlrewrite)。就个人而言,我会使用自定义约束。
    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2023-02-11
    相关资源
    最近更新 更多