需要将URL参数传递到Web API

时间:2019-05-21 21:40:37

标签: asp.net-mvc asp.net-web-api

我有一个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配置)。

但是,如果我不对其进行编码,则会抛出“在路径中发现危险字符”异常。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

尝试将*添加到路由模板:

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

,并且无需编码即可使用。