ASP.NET Core中如何实现重定向详解

ASP.NET Core 是一个跨平台,开源的,轻量级的,模块化的,用于构建高性能的 web 开发框架, ASP.NET Core MVC 内置了多种方式将一个 request 请求跳转到指定的url,这篇文章我们就来讨论如何去实现。

理解 RedirectActionResult

ASP.NET Core MVC 中内置了几种 Redirect,比如说:RedirectResult, RedirectToActionResult, RedirectToRouteResult 和 LocalRedirectResult,这些类都继承于 ActionResult 并可给前端返回 Http 302,Http 301,Http 307 和 Http 308 这些状态码。

接下来的文章中我们就来看看如何使用这些类。

使用 RedirectResult

可以使用下面任何一个方法来返回 RedirectResult。

Redirect 返回 Http 状态码为 302

RedirectPermanent 返回 Http 状态码为 301

RedirectPermanentPreserveMethod 返回 Http 状态码为 308

RedirectPreserveMethod 返回 Http 状态码为 307

具体状态码代表什么意思,大家可查专业资料,下面的代码展示了如何使用这些方法。

Redirect("/Home/Index"); RedirectPermanent("/Home/Index"); RedirectPermanentPreserveMethod("/Home/Index"); RedirectPreserveMethod("/Home/Index");

如果你被这些方法搞蒙圈了,可以直接使用 RedirectResult ,然后通过 permanent 和 preserveMethod 两个参数去调节返回什么样的 Http 状态码即可, 代码如下所示:

public RedirectResult Index() { return new RedirectResult(url: "/Home/Index", permanent: true, preserveMethod: true); }

ASP.NET Core中如何实现重定向详解

值得注意的是,Redirect 方法也可以将请求导向一个指定的url地址上,比如下面这样:

public RedirectResult Index() { return Redirect("https://google.com"); }

接下来简单了解一下继承关系: HomeController 继承了 Controller ,后者又继承了 ControllerBase 并实现了 IActionFilter, IFilterMetadata, IAsyncActionFilter, 和 IDisposable 接口,如下代码所示:

public class HomeController : Controller { } public abstract class Controller : ControllerBase, IActionFilter, IFilterMetadata, IAsyncActionFilter, IDisposable { }

使用 RedirectToActionResult

这个 ActionResult 用于将请求转向到指定的 Controller.Action ,如果没有指定 Controller 的话,自然就会跳转到当前 Controller 下的 Action,可使用下面罗列的方法将请求跳转到指定的 Action。

RedirectToAction 返回 Http 状态码为 302

RedirectToActionPermanent 返回 Http 状态码为 301

RedirectToActionPermanentPreserveMethod 返回 Http 状态码为 308

RedirectToActionPreserveMethod 返回 Http 状态码为 307

如果不想使用具体的方法,也可以直接使用父类的 RedirectToAction 方法。

public RedirectToActionResult Index() { return RedirectToAction(actionName: "Index", controllerName: "Home"); }

如果你只需要跳转到当前 Controller 下的某一个 Action,可以忽略 Controller 名字,如下代码所示:

public RedirectToActionResult Index() { return RedirectToAction(actionName: "Privacy"); }

使用 RedirectToRouteResult

这是另一种可将 请求跳转到指定 Action 的方式,你可以使用下面罗列的方法来实现跳转。

RedirectToRoute 返回 Http 状态码为 302

RedirectToRoutePermanent 返回 Http 状态码为 301

RedirectToRoutePermanentPreserveMethod 返回 Http 状态码为 308

RedirectToRoutePreserveMethod 返回 Http 状态码为 307

下面的代码片段展示了 如何使用 RedirectToRoute 。

public RedirectToRouteResult Index() { return RedirectToRoute("author"); }

也可以通过 RouteValueDictionary 来指定需要跳转的 Route 值,如下代码所示:

var routeValue = new RouteValueDictionary(new { action = "View", controller = "Author"}); return RedirectToRoute(routeValue);

使用 LocalRedirectResult

这个 ActionResult 只用于跳转到本地url ,也就意味着一旦你跳转到外部网站的url,肯定会抛出异常的。可以使用下面罗列的方法来实现跳转。

LocalRedirect 返回 Http 状态码为 302

LocalRedirectPermanent 返回 Http 状态码为 301

LocalRedirectPermanentPreserveMethod 返回 Http 状态码为 308

LocalRedirectPreserveMethod 返回 Http 状态码为 307

跳转到 Razor 页面

最后需要了解的一点是,你可以使用 RedirectToPage 方法将请求跳转到指定的 Razor 页面,返回 Http状态码 302,比如说:你有一个 Author Page,接下来用如下代码实现跳转。

public IActionResult RedirectToAuthorPage() { return RedirectToPage("Author"); }

译文链接: https://www.infoworld.com/art...

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7fb41917c30f0e3e95f804128308f384.html