确定请求的url是否是返回类型为ViewResult的Controller方法



我试图在登录请求后处理一个returnUrl字符串,这样:

if (returnUrl is pointing to a ViewResult)
proceed to the requested destination 
else
Redirect to home

如何确定url是否指向返回类型为ViewResult的控制器方法?

如何确定url是否指向返回类型为ViewResult的控制器方法?

首先,这不是一个好主意。如果一个方法的结果是ActionResult,你永远不可能100%知道结果是否是ViewResult,因为有人可能会改变它

如果您真的决心这样做,那么每个控制器上的每个返回值都将设为ViewResult。然后,您可以创建一个自定义AuthorizationAttribute,它可以确定用户是否登录,是否填充了ReturnUrl(或其他标志),然后使用反射(这对性能不太好,但它只在登录时,所以基本上可以)来确定方法的返回类型。

我不明白为什么"每个控制器上的每个返回值都必须是ViewResult。">

因为如果不这样做,就不能保证返回类型为ActionResult的方法是ViewResult

DotNetFiddle示例

使用系统;

public class Program
{
public static void Main()
{
var result = typeof(TestController).GetMethod("MyMethod").ReturnType;
Console.WriteLine("TestController:MyMethod returns {0}", result.Name);
}
public class TestController
{
public ActionResult MyMethod()
{
return new ViewResult();
}
}
// mocking System.Web.Mvc
public abstract class ActionResult { }
public class ViewResult : ActionResult { }
public class JsonResult : ActionResult { }
}

结果

TestController:MyMethod返回ActionResult

有人将new ViewResult()更改为Json(myModel),您无法通过反射检测到更改。

相关内容

最新更新