我有一个MVC应用,其中大多数控制器的类型为@(pattern1|pattern2)
。还有一个类型为System.Web.MVC.Controller
的Web API控制器。
Web API控制器具有需要接受URL作为参数的操作,如下所示:
System.Web.Http.ApiController
在视图上,我想使用[HttpGet]
public HttpResponseMessage Image(string path)
{
//download and return image using WebClient library
}
这样的操作
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" }
);
或/api/image/someimage-1.jpg
之类的路径调用Image操作
问题:
对于/api/image/someimage-2.jpg
Image
操作
如果我使用/api/image/?path=/remote/relative/path/someimage.jpg
对长路径进行编码,它将直接转到全局“未找到”操作(通过web.config配置)。
但是,如果我不对其进行编码,则会抛出“在路径中发现危险字符”异常。
我在做什么错了?
答案 0 :(得分:0)
尝试将*
添加到路由模板:
config.Routes.MapHttpRoute(
name: "api-image",
routeTemplate: "/api/image/{*path}",
defaults: new { controller = "WebApiClient", action = "Image" }
);
,并且无需编码即可使用。