前言

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);
}

值得注意的是,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");
}

译文链接: …

总结

到此这篇关于asp.net core中如何实现重定向的文章就介绍到这了,更多相关asp.net core实现重定向内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!