Необходимо передать параметр URL в веб-API - PullRequest
0 голосов
/ 22 мая 2019

У меня есть приложение MVC с большинством контроллеров типа System.Web.MVC.Controller.Существует один контроллер Web API также типа System.Web.Http.ApiController.

В контроллере Web API есть действие, которое должно принимать URL в качестве параметра, что-то вроде этого:

[HttpGet]       
public HttpResponseMessage Image(string path)
{
    //download and return image using WebClient library
}

Наview Я хотел бы использовать действие Image, например,

<image src="/api/image/?path=/remote/relative/path/someimage.jpg" alt="some description" />

Я использую следующий шаблон маршрута:

config.Routes.MapHttpRoute(
    name: "api-image",
    routeTemplate: "/api/image/{path}",
    defaults: new { controller = "WebApiClient", action = "Image" }
);

Действие Image вызывается только для путей, таких как /api/image/someimage-1.jpg или /api/image/someimage-2.jpg

Вопрос: Действие Image не вызывается для длинных путей, таких как /api/image/?path=/remote/relative/path/someimage.jpg

Если я кодирую длинный путь с помощью HttpUtility.UrlEncode, он просто переходит к глобальному действию Not Found (настраивается через web.config).

Но если я не закодирую его, выдается исключение "Опасные символы найдены в пути".

Что я делаю не так?

1 Ответ

0 голосов
/ 22 мая 2019

Попробуйте добавить * в шаблон маршрута:

config.Routes.MapHttpRoute(
    name: "api-image",
    routeTemplate: "/api/image/{*path}",
    defaults: new { controller = "WebApiClient", action = "Image" }
);

и используйте его без кодировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...