C# .NET Core RedirectToAction未重定向

C# .NET Core RedirectToAction未重定向,c#,asp.net-mvc,asp.net-core,asp.net-web-api,asp.net-core-webapi,C#,Asp.net Mvc,Asp.net Core,Asp.net Web Api,Asp.net Core Webapi,我有这个代码,我想删除一个用户,然后重定向到索引页面。 同一个return语句已经在其他方法中使用,但它在这个方法中不起作用。。。 当我使用调试模式时,会调用该方法,但不会重定向 [HttpDelete] [Authorize] public async Task<IActionResult> RemoveUser() { //var packages = await packageService.GetPackagesCreatedByUserAsync(User.GetU

我有这个代码,我想删除一个用户,然后重定向到索引页面。 同一个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");
}
[HttpDelete]
[授权]
公共异步任务RemoveUser()
{
//var packages=await packageService.GetPackagesCreatedByUserAsync(User.GetUserId());
//if(packages.Any(p=>p.packagessubscribers.Count>0))
//返回禁止();
//userService.Logout(User.GetUserId(),HttpContext);
//等待userService.RemoveUser(User.GetUserId());
返回重定向到操作(nameof(HomeController.Index),“Home”);
}
[HttpDelete]
[授权]
公共异步任务RemoveUser()
{
返回重定向到操作(“索引”、“主页”);
}

您必须遵循此语法

[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", some_options);
Microsoft文档中的关键字名称

[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");
}
使用nameof代替字符串。字符串文字或常量 匹配包含方法的参数的名称或名称 包含类型的属性的参数用作 方法

[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");
}
例如:

[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");
}
而不是像这样使用神奇的字符串

[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");
}
public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
我们使用

[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");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}
或在webapi中使用

[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");
}
// 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);
}
//POST:api/Todo
[HttpPost]
公共异步任务PostTodoItem(TodoItem项)
{
_context.TodoItems.Add(项);
wait_context.SaveChangesAsync();
返回createDataAction(nameof(GetTodoItem),new{id=item.id},item);
}
前面的代码是HTTP POST方法,如 [HttpPost]属性。该方法从中获取待办事项的值 HTTP请求的主体

[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");
}
CreateDataAction方法:

[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");
}
如果成功,则返回HTTP 201状态代码。HTTP 201是 创建新资源的HTTP POST方法的标准响应 在服务器上

[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");
}
将位置标头添加到响应中。位置标题指定 新创建的待办事项的URI。有关详细信息,请参阅 10.2.2 201已创建

[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");
}
引用GetTodoItem操作来创建位置头的URI。C#nameof关键字用于避免对操作进行硬编码 CreateDataAction调用中的名称。

[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)遵循此语法。