我有一个带有大多数System.Web.MVC.Controller
类型控制器的MVC应用程序。有一个Web API控制器也是System.Web.Http.ApiController
类型的。
Web API控制器有一个需要接受URL作为参数的操作,如下所示:
[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
或/api/image/someimage-2.jpg
这样的路径才会调用图像操作
问题:对于像/api/image/?path=/remote/relative/path/someimage.jpg
这样的长路径,不会调用Image
操作
如果我用HttpUtility.UrlEncode
对长路径进行编码,它就会转到全局找不到的操作(通过web.config配置)。
但如果我不对其进行编码,就会抛出“在路径中找到危险字符”异常。
我做错了什么?
发布于 2019-05-22 05:54:05
尝试将*
添加到路由模板:
config.Routes.MapHttpRoute(
name: "api-image",
routeTemplate: "/api/image/{*path}",
defaults: new { controller = "WebApiClient", action = "Image" }
);
不用编码就可以使用它。
https://stackoverflow.com/questions/56246723
复制相似问题