【问题标题】:.NET Core RedirectToAction not redirecting [duplicate].NET Core RedirectToAction 不重定向 [重复]
【发布时间】:2020-01-09 23:43:27
【问题描述】:

我有此代码,我想在其中删除用户,然后重定向到索引页面。 相同的 return 语句已经在其他方法中使用,但它在这个方法中不起作用...... 当我使用调试模式时,会调用该方法,但不会重定向。

[HttpDelete]
[Authorize]
public async Task<IActionResult> RemoveUser()
{
    //var packages = await packageService.GetPackagesCreatedByUserAsync(User.GetUserId());
    //if (packages.Any(p => p.PackageSubscribers.Count > 0))
    //    return Forbid();

    //userService.Logout(User.GetUserId(), HttpContext);
    //await userService.RemoveUser(User.GetUserId());

    return RedirectToAction(nameof(HomeController.Index), "Home");
}

【问题讨论】:

  • RedirectToActionResult("ActionName", "ControllerName", null); 遵循此语法。

标签: c# asp.net-mvc asp.net-core asp.net-web-api asp.net-core-webapi


【解决方案1】:
[HttpDelete]
[Authorize]
public async Task<IActionResult> RemoveUser()
{
return RedirectToAction("Index", "Home");
}

【讨论】:

    【解决方案2】:

    你必须遵循这个语法

    RedirectToActionResult("ActionName", "ControllerName", some_options);
    

    Microsoft 文档中的 nameof 关键字

    使用 nameof 代替字符串。一个字符串文字或常量 匹配包含方法的参数名称或名称 包含类型的属性的 用作参数 方法。

    例子:

    而不是像这样使用魔术字符串

    public Book(string title)
    {
        // Violates rule CA1507
        Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
    }
    

    我们使用

    public Book(string title)
    {
        // Resolves rule CA1507 violation
        Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
    }
    

    或者在webapi中使用

    // POST: api/Todo
    [HttpPost]
    public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem item)
    {
        _context.TodoItems.Add(item);
        await _context.SaveChangesAsync();
    
        return CreatedAtAction(nameof(GetTodoItem), new { id = item.Id }, item);
    }
    

    前面的代码是一个 HTTP POST 方法,如 [HttpPost] 属性。该方法获取待办事项的值 HTTP 请求的正文。

    CreatedAtAction 方法:

    如果成功,则返回 HTTP 201 状态代码。 HTTP 201 是 创建新资源的 HTTP POST 方法的标准响应 在服务器上。

    在响应中添加 Location 标头。 Location 标头指定 新创建的待办事项的 URI。有关详细信息,请参阅 10.2.2 201 创建。

    引用 GetTodoItem 操作以创建 Location 标头的 URI。 C# nameof 关键字用于避免对操作进行硬编码 CreatedAtAction 调用中的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多