我正在尝试将URL作为字符串参数传递给WEB API GET方法。
控制器:
public class LinksController : ApiController
{
public HttpResponseMessage Get(string targetUrl)
{
//query db with targetURL
}
}
目的是查询数据库以查看是否存储了URL。这适用于简单的URL和URL,其查询字符串包含单个参数,如:
我遇到的问题特别是当查询字符串包含多个参数时,例如
调试时,targetUrl的值仅为“... / watch?v = nLPE4vhSBx4”,表示& feature = youtube_gdata丢失。
GET请求如下所示:
http://localhost:58056/api/links?targetUrl=http://www.youtube.com/watch? v=nLPE4vhSBx4&feature=youtube_gdata
我还尝试在WebApiConfig.cs中添加以下路由:
config.Routes.MapHttpRoute(
name: "Links",
routeTemplate: "api/links/{targetUrl}",
defaults: new { controller = "Links", targetUrl= RouteParameter.Optional }
);
但是GET请求会导致400 Bad Request。
所以我的问题是,不能这样做吗?我想要完整的网址!或者我是否需要更改方法标头以使用[FromBody]
属性并将其作为JSON对象传递?
答案 0 :(得分:0)
您应该URLEncode
您的目标网址参数,以便它不会被误认为后续查询字符串参数。这意味着您指定的URL应显示为:
http://localhost:58056/api/links?targetUrl=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DnLPE4vhSBx4%26feature%3Dyoutube_gdata
然后在Get方法中,URLDecode
作为参数传递的字符串。
这两种方法都可以在System.Web.HttpUtility