微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字符串发布到MVC控制器

如何解决将字符串发布到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控制器而不要求将其作为类传递呢?

解决方法

典型端点返回IActionResultIActionResult的实现。例如,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 举报,一经查实,本站将立刻删除。