繁体   English   中英

同时阅读FromUri和FromBody

[英]Reading FromUri and FromBody at the same time

我在web api中有一个新方法

[HttpPost]
public ApiResponse PushMessage( [FromUri] string x, [FromUri] string y, [FromBody] Request Request)

请求类就像

public class Request
{
    public string Message { get; set; }
    public bool TestingMode { get; set; }
}

我正在使用PostBody对localhost / Pusher / PushMessage进行查询?x = foo&y = bar:

{ Message: "foobar" , TestingMode:true }

我错过了什么吗?

帖子正文通常是这样的URI字符串:

Message=foobar&TestingMode=true

您必须确保HTTP标头包含

Content-Type: application/x-www-form-urlencoded

编辑 :因为它仍然无法正常工作,我自己创建了一个完整的例子。
它打印正确的数据。
我还使用了.NET 4.5 RC。

// server-side
public class ValuesController : ApiController {
    [HttpPost]
    public string PushMessage([FromUri] string x, [FromUri] string y, [FromBody] Person p) {
        return p.ToString();
    }
}

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString() {
        return this.Name + ": " + this.Age;
    }
}

// client-side
public class Program {
    private static readonly string URL = "http://localhost:6299/api/values/PushMessage?x=asd&y=qwe";

    public static void Main(string[] args) {
        NameValueCollection data = new NameValueCollection();
        data.Add("Name", "Johannes");
        data.Add("Age", "24");

        WebClient client = new WebClient();
        client.UploadValuesCompleted += UploadValuesCompleted;
        client.Headers["Content-Type"] = "application/x-www-form-urlencoded";
        Task t = client.UploadValuesTaskAsync(new Uri(URL), "POST", data);
        t.Wait();
    }

    private static void UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e) {
        Console.WriteLine(Encoding.ASCII.GetString(e.Result));
    }
}

Web API使用命名规则。 帖子的方法应该用Post开始。

您应该将PushMessage重命名为方法名称PostMessage。

web api默认也会监听(取决于你的路线)'api / values / Message'而不是Pusher / Pushmessage。

[HttpPost]属性不是必需的

您可以使用以下代码在请求正文中发布json:

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

Request request = new Request();
HttpResponseMessage response = httpClient.PostAsJsonAsync("http://localhost/Pusher/PushMessage?x=foo&y=bar", request).Result;

//check if (response.IsSuccessStatusCode)
var createResult = response.Content.ReadAsAsync<YourResultObject>().Result;

暂无
暂无

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

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