繁体   English   中英

asp.net web api 2如何在POST中接受查询字符串?

[英]asp.net web api 2 How can I accept a query string in POST?

我有一个控制器,我尝试在其中发布带有查询字符串的以下内容

http://localhost:53546/api/v1/projects?id=ABA28A61-8898-4739-8464-386C7890E435

但这不会影响控制器的POST方法

但是这样做

http://localhost:53546/api/v1/projects/ABA28A61-8898-4739-8464-386C7890E435

如何在帖子中接受查询字符串? 我不断收到504错误:方法不受支持。 在ASP.NET Web API中是否有一些特殊的语法可以接受查询字符串?

这是我的控制器

[RoutePrefix("api/v1/projects")]
public class ProjectController : ApiController
{
    private RestClient client;

    public ProjectController() {
        client = new RestClient("http://localhost:53546");
    }

    [HttpPost]
    [Route("{id:guid}")]
    public string Post(Guid id)
    {
        return "Here is your Post id - " + id.ToString();
    }
}

这是我的DoPost方法

public JToken DoRequest(string path, string method, params string[] parameters)
{
    if (!path.StartsWith("/"))
    {
        path = "/" + path;
    }
    var fullUrl = url + path + ToQueryString(parameters);

    if (DebugUrls) Console.WriteLine("Requesting: {0}", fullUrl);

    var request = WebRequest.Create(new Uri(fullUrl));
    request.Method = method;
    request.ContentType = "application/json";
    request.ContentLength = 0;
    var response = request.GetResponseAsync().Result;
    using (var responseStream = response.GetResponseStream())
    {
        return ReadResponse(responseStream);
    }
}

这很重要,这是我的路线配置

    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

查询字符串不是路由的一部分。

因此,您需要添加[Route("")]来添加一条附加路径,该附加路径不会在控制器的前缀中添加任何内容。

如前所述,您已将ID定义为默认路由的一部分。 这意味着,当API控制器具有接受id作为参数的方法时,路由引擎将期望在uri中找到它,而不是从查询字符串中找到它。

在上面的POST示例中,如果在DoRequest代码中将参数名称从id更改为postId并将id更改为postId,则它应该可以工作。

另一种选择是从您的routeTemplate中删除{id},并同时删除id的默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM