我正在尝试将请求从一台服务器发布到使用WebAPI技术的第二台服务器。 这是接收呼叫的方法
[HttpGet]
[HttpPost]
public HttpResponseMessage MyMethod([FromBody] string token, [FromBody] string email, [FromBody] string password)
{
string a = "hello world!";
return new HttpResponseMessage() { Content = new StringContent(a) };
}
我正在使用此代码发布到它:
using (var c = new WebClient())
{
//string obj = ":" + JsonConvert.SerializeObject(new { token= "token", email="email", password="password" });
NameValueCollection myNameValueCollection = new NameValueCollection();
// Add necessary parameter/value pairs to the name/value container.
myNameValueCollection.Add("token", "token");
myNameValueCollection.Add("email", "email");
myNameValueCollection.Add("password", "password");
byte[] responseArray = c.UploadValues("MyServer/MyMethod", "POST", myNameValueCollection);
return Encoding.ASCII.GetString(responseArray);
}
我尝试了几种替代方案。
我上面写的这个给了我一个内部服务器错误,我的MyMethod中的断点没有被命中,所以问题不在我方法的代码上。
在评论为nameValueCollection添加参数的三行时,我得到了404。
从MyMethod的签名中删除参数,它可以正常工作。
我想将此信息发布到托管API的服务器。
你知道我做错了吗?
答案 0 :(得分:1)
一如既往地编写视图模型:
public class MyViewModel
{
public string Token { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
您的控制器操作将作为参数:
[HttpPost]
public HttpResponseMessage MyMethod(MyViewModel model)
{
string a = "hello world!";
return new HttpResponseMessage() { Content = new StringContent(a) };
}
请注意,我已经摆脱了[HttpGet]
属性。你必须选择动词。顺便说一句,如果您遵循标准的ASP.NET Web API路由约定,您的操作名称应该与用于访问它的HTTP谓词相对应。这是标准的RESTful约定。
现在你可以点击它:
using (var c = new WebClient())
{
var myNameValueCollection = new NameValueCollection();
// Add necessary parameter/value pairs to the name/value container.
myNameValueCollection.Add("token", "token");
myNameValueCollection.Add("email", "email");
myNameValueCollection.Add("password", "password");
byte[] responseArray = c.UploadValues("MyServer/MyMethod", "POST", myNameValueCollection);
return Encoding.ASCII.GetString(responseArray);
}