Asp.net web api 将包含查询字符串的URL作为参数ASP.Net Web API GET传递?

Asp.net web api 将包含查询字符串的URL作为参数ASP.Net Web API GET传递?,asp.net-web-api,url-parameters,asp.net-web-api-routing,Asp.net Web Api,Url Parameters,Asp.net Web Api Routing,我试图将URL作为字符串参数传递给WEB API GET方法 控制员: public class LinksController : ApiController { public HttpResponseMessage Get(string targetUrl) { //query db with targetURL } } 目的是查询数据库以查看是否存储了URL。这适用于简单URL和查询字符串包含单个参数的URL,如: 我遇到的问题特别是当查询字

我试图将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\u 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个错误请求


所以我的问题是,这不能做到吗?我想完整的网址!或者我需要更改方法头以使用
[FromBody]
属性并将其作为JSON对象传递吗?

您应该
URLEncode
您的目标URL参数,这样它就不会被误认为是后续的查询字符串参数。这意味着您指定的URL应显示为:

http://localhost:58056/api/links?targetUrl=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DnLPE4vhSBx4%26feature%3Dyoutube_gdata
然后在Get方法中,
URLDecode
作为参数传递的字符串

这两种方法都可以在中找到