如何解决将字符串发布到MVC控制器
我目前是第一次查看Angular,并尝试将简单的字符串发布到MVC控制器。但是,当我尝试使用Angular客户端发布字符串时,收到了错误的请求响应。
测试类:
public class Test
{
public string Email { get; set; }
}
通过Angular客户端发布:
this.client.post<boolean>(this.baseUrl + 'weatherforecast/Test',{ Email: Email });
这会导致错误的请求响应。
[HttpPost]
[Route("Test")]
public bool Test([FromBody] string Email)
{
if (Email == "TestInput")
{
return true;
}
return false;
}
但这可行:
[HttpPost]
[Route("Test")]
public bool Test([FromBody] Test EmailObject)
{
if (EmailObject.Email == "TestInput")
{
return true;
}
return false;
}
如果我尝试将JSON直接发布为“ StringValue”而不是{Email:“ StringValue”},则会收到不受支持的媒体类型响应。
我想有一个简单的解决方案,但是有没有一种方法可以允许将字符串发布到MVC控制器而不要求将其作为类传递呢?
解决方法
典型端点返回IActionResult
或IActionResult
的实现。例如,Ok()
转换为HTTP 200响应,NotFound
转换为HTTP 404。
[HttpPost]
[Route("Test")]
public IActionResult Test([FromBody] Test EmailObject)
{
if (EmailObject.Email == "TestInput")
{
return Ok(true);
}
return Ok(false);
}
很确定您必须将其包装在一个对象中才能发布。这不是ASP.NET Core的限制,而是一般JavaScript的规则。只需输入"StringValue"
是无效的JSON,但是输入{ Email:Email }
是有效的。
旁注:
您可以使用查询字符串:
[HttpGet]
[Route("Test")]
public IActionResult Test([FromQuery] string email)
{
if (email == "TestInput")
{
return Ok(true);
}
return Ok(false);
}
然后这样称呼它:
http://example.com/api/Test?email=TestInput
然后一个字符串将起作用。
免责声明:我完全不知道Angular的工作原理。
,已通过Postman和有效负载“ TestInput”和Content-Type测试的控制器方法:application / json
[HttpPost("Test")]
public bool Test([FromBody] string email)
{
return email?.Equals("TestInput") == true;
}
此答案中的描述如下:https://stackoverflow.com/a/50021779/14072498
const httpOptions = {
headers: new HttpHeaders({'Content-Type': 'application/json'})
}
const payload = 'TestInput';
this.client.post<boolean>(this.baseUrl + 'weatherforecast/Test',`\"${payload}\"`,httpOptions);
注意
`\"${payload}\"`
可以(应该)替换
JSON.stringify(payload)
但后者对评论此答案的人无效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。