UriPathExtensionMapping в MVC 4 - PullRequest
       39

UriPathExtensionMapping в MVC 4

1 голос
/ 01 марта 2012

Как использовать UriPathExtensionMapping в MVC4? Я добавил отображение в форматере так, чтобы:

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()
    {
    }

Как я могу решить это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 мая 2012

Не помню, заметил ли я эту проблему, но это может быть потому, что я явно указал значение по умолчанию для расширения, например:

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

* note format = "json" в строке, начинающейся с defaults.

Я также заметил, что иногда это не работает с запросами с конечными параметрами для id, например ~/api/1/values/get.json/4.

.
0 голосов
/ 08 марта 2012

Я не могу воспроизвести эту проблему.

Вы правы в том, что для использования UriPathExtensionMapping вам нужно будет указать {controller}. {Ext} в вашем маршруте, как описано выше. Если вы укажете только {controller}, а uri будет выглядеть как ~ / home.json, тогда токен контроллера будет сопоставлен с home.json, что, вероятно, не то, что вам нужно

Однако вам не нужно требовать параметр "extension" в вашем действии. Если вы продолжаете сталкиваться с этой проблемой, можете ли вы опубликовать всю свою репродукцию, включая ваш контроллер, маршруты и конфигурацию, настроенные с помощью специального средства форматирования? благодарю вас.

...