我在Web API控制器中有一个POST操作。收到的标题是......
Connection: Close
Content-Length: 19094
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
Host: xxxxxxxxxxxxx.co.uk
在我的IIS日志中,我可以看到GENERAL_REQUEST_ENTITY为
"This is some posted data"
但是我似乎无法使用我的web api控制器获取这段数据。
public HttpResponseMessage Post([FromBody] string value)
发送的数据似乎不符合要求的格式。根据我的理解,Microsoft决定发布到FromBody属性的任何内容都需要以" ="为前缀。 e.g。
="This is some posted data"
但是我收到的数据(来自我无法控制的来源)不包含" ="。
"This is some posted data"
我的web api方法因此完全忽略了发送的数据。我试图切换到使用FormDataCollection,但由于我收到的数据没有指定密钥,值似乎最终出现在关键字段中,似乎是有点奇怪。
public HttpResponseMessage Post(FormDataCollection form)
{
string extracted = form.ReadAsNameValueCollection().GetKey(0);
}
我尝试过创建一个类/复杂类型来包装它,但是由于发布的数据不包含密钥,它似乎永远不会匹配。
我错过了一些明显的东西。我只想将这些数据作为字符串发布到我的Web服务中?任何帮助表示赞赏。
经过多次搜索后,我发现一些人遇到了同样的问题,看起来他们不得不向上移动堆栈并使用HttpRequestMessage。显然不理想,因为它使单元测试成为一场噩梦。
public HttpResponseMessage Post(HttpRequestMessage message)
{
string extracted = message.Content.ReadAsStringAsync().Result;
}
如果有人有更好的方法来实现这一点,请告诉我。
答案 0 :(得分:0)
在Web Api中处理POST link
public class LoginData
{
public string Username { get; set; }
public string Password { get; set; }
}
[HttpPost]
public HttpResponseMessage Authenticate(LoginData login)
{
string username = login.Username;
string password = login.Password;
…
}