【问题标题】:MVC Redirect from void-POST Action来自 void-POST 操作的 MVC 重定向
【发布时间】:2018-08-15 12:59:41
【问题描述】:

我当前的操作如下所示:

[HttpPost]
public void AddMessage([FromBody] ShoutboxMessage input)
{
    if (!string.IsNullOrWhiteSpace(input.Message) && Request.Cookies["usrid"] != null)
    {
        input.SbUserId = int.Parse(Request.Cookies["usrid"]);
        input.Timestamp = DateTime.UtcNow;
        context.ShoutboxMessages.Add(input);
        context.SaveChanges();
    }
}

我只想这样做:

[HttpPost]
public void AddMessage([FromBody] ShoutboxMessage input)
{
    if (Request.Cookies["usrid"] == null)
        RedirectToAction("Login");

    if (!string.IsNullOrWhiteSpace(input.Message))
    {
        //...
    }
}

但这显然行不通。有没有办法从应该返回无效的操作中重定向?或者,反过来,应该返回 ActionResult 的 Action 是否不会导致当前页面的任何重定向或重新加载?

编辑:“重复”与此无关。可能void 动作返回与EmptyResult 动作基本相同,但这不是这里的主题,基本上我想知道如何在运行时在EmptyResult 和ActionResult 之间进行选择。

【问题讨论】:

标签: c# asp.net asp.net-mvc redirect


【解决方案1】:

这样的?您可以随时从 Action 返回 EmptyResult()。

[HttpPost]
public ActionResult AddMessage([FromBody] ShoutboxMessage input)
{
    if (Request.Cookies["usrid"] == null)
        return this.RedirectToAction("Login");

    if (!string.IsNullOrWhiteSpace(input.Message))
    {
        //...
        return new EmptyResult();
    }
}

【讨论】:

  • 我不能只返回 null,因为它会导致 500 响应(即使将 Response.StatusCode 设置为 200 时)并弄乱我的 JS 响应处理
  • 奇怪,我已经根据 mjwills 在评论中发布的链接编辑了我的答案。在我的测试项目中,我收到了常规的空 200 响应。
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多