首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串发送到ASP.NET Web Api应用程序-返回null

将字符串发送到ASP.NET Web Api应用程序-返回null
EN

Stack Overflow用户
提问于 2012-12-08 05:11:51
回答 7查看 125.3K关注 0票数 45

我正在尝试将字符串从客户端传输到ASP.NET MVC4应用程序。

但我无法接收字符串,它可能是null或无法找到post方法(404错误)

用于传输字符串的客户端代码(控制台应用程序):

代码语言:javascript
运行
复制
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:49032/api/test");
request.Credentials = new NetworkCredential("user", "pw");
request.Method = "POST";
string postData = "Short test...";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;

Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

WebResponse response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();

StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
Console.ReadLine();

ASP.NET网络Api控制器:

代码语言:javascript
运行
复制
public class TestController : ApiController
{
    [Authorize]
    public String Post(byte[] value)
    {
        return value.Length.ToString();
    }
}

在这种情况下,我可以调用"Post“方法,但”NULL“是值。如果我将方法签名改为(字符串值),那么它将永远不会被调用。

即使“没有”Authorize设置,它也有同样奇怪的行为。->,所以它与用户身份验证无关。

你知道我做错了什么吗?我很感谢你的帮助。

EN

Stack Overflow用户

发布于 2012-12-10 03:27:14

达雷尔的回答当然是对的。需要补充的一点是,为什么要尝试绑定到包含单个令牌(如"hello“)的主体。

它并不完全是URL形式的编码数据。在前面添加“=”如下所示:

代码语言:javascript
运行
复制
=hello

它变成了一个URL表单编码,其中包含一个名称和值均为空的键值对“hello”。

但是,更好的解决方案是在上传字符串时使用application/json:

代码语言:javascript
运行
复制
POST /api/sample HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: host:8080
Content-Length: 7

"Hello"

使用HttpClient,您可以执行以下操作:

代码语言:javascript
运行
复制
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsJsonAsync(_baseAddress + "api/json", "Hello");
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);

亨里克

票数 3
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13771032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档