У меня есть приложение 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).
Но если я не закодирую его, выдается исключение "Опасные символы найдены в пути".
Что я делаю не так?