2

我正在尝试让 Uri 路径扩展映射在 Web API 中工作。我正确设置了路线:

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

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

它适用于默认路由,例如/api/products.json/123但对于其他方法,例如/api/products.json?categoryid=5我收到一条错误消息:

"No action was found on the controller 'Products' that matches the request."

所有路由工作都没有扩展名,例如/api/products/123/api/products?categoryid=5。有人知道我缺少什么吗?

4

2 回答 2

8

如果其他人遇到此问题,那么答案(如何使 Uri 扩展映射工作)可能如下(这对我自己有用,经过多次挫折和搜索)

将以下内容添加到您的 web.config 中的 System.WebServer 部分

<modules runAllManagedModulesForAllRequests="true"/>
于 2013-04-30T16:44:22.950 回答
1

/api/products.json?categoryid=5将映射到以下控制器操作:

public class ProductsController : ApiController
{
    public string Get(int categoryid)
    {
        return categoryid.ToString();
    }
}

所以确保这个控制器和动作存在。在评论部分,你似乎已经指出了一些GetProduct(int id)GetProductsByCategory(int categoryid)行动,但这些永远不会被使用。根据 RESTful 约定,当您使用动词Get时将调用该操作。GET如果您想使用一些非 RESTful 操作名称,请确保{action}在路由定义中包含 。

于 2012-08-06T16:21:48.680 回答