1

如何在 MVC4 中使用 UriPathExtensionMapping?我在格式化程序中添加了映射,这样:

MediaTypeMappings.Add(new UriPathExtensionMapping("json", new MediaTypeHeaderValue("application/json"))

但是我不能在我的路线上使用扩展名,除非我添加一个动词,例如:

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}.{extension}"

        );

然后它会识别出我想要的媒体类型,但它也开始期待“扩展”作为操作的参数。例子:

    public object Get(string extension)
    {
    }

而不仅仅是:

    public object Get()
    {
    }

我该如何解决这个问题?

谢谢!

4

2 回答 2

0

我无法重现这个问题。

你是对的,要使用 UriPathExtensionMapping,你需要在你的路由中指定 {controller}.{ext},就像你上面描述的那样。如果您只指定 {controller},并且 uri 看起来像 ~/home.json,那么控制器令牌将映射到 home.json,这可能不是您想要的。

但是,您不需要在操作中使用“扩展”参数。如果您继续看到此问题,您能否发布您的整个复制品,包括您的控制器、您的路线和使用自定义格式化程序设置的配置?谢谢你。

于 2012-03-08T07:09:18.877 回答
0

我不记得我是否注意到了这个问题,但这可能是因为我明确指定了扩展的默认值,例如:

var rF = routes.MapHttpRoute(
    name: "DefaultApi.v1.format",
    routeTemplate: "api/1/{controller}/{action}.{format}/{*id}",
    defaults: new { id = RouteParameter.Optional, format = "json", version = 1 }
);

*注意以 .format = "json"开头的行defaults

我还注意到,这有时不适用于带有尾随参数的请求id,例如~/api/1/values/get.json/4.

于 2012-05-02T13:11:12.470 回答