代码之家  ›  专栏  ›  技术社区  ›  stevemegson

未执行自定义ASP.NET MVC ActionResult

  •  0
  • stevemegson  · 技术社区  · 14 年前

    我用过 PermanentRedirectResult here 在ASP.NET MVC 1中执行301重定向。由于升级到2.0,301响应不再发送。相反,只发送包含类名的200响应。

    ExecuteResult 上的方法 永久直接结果 从来没有人打过电话。显然,框架只是对结果调用ToString(),而不是执行它。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Tyler Jensen    14 年前

    有点返工了 Steve Sanderson's Pro ASP.NET MVC 2 Framework

    public class HomeController : Controller
    {
      public ActionResult Index()
      {
        return RedirectToAction("Other").MakePermanent();
      }
    
      public ActionResult Other()
      {
        return View();
      }
    }
    
    public static class RedirectExtensions
    {
      public static PermRedirectToRouteResult MakePermanent(this RedirectToRouteResult redirect)
      {
        return new PermRedirectToRouteResult(redirect);
      }
    
      public class PermRedirectToRouteResult : ActionResult
      {
        public RedirectToRouteResult Redirect { get; private set; }
        public PermRedirectToRouteResult(RedirectToRouteResult redirect)
        {
          this.Redirect = redirect;
        }
        public override void ExecuteResult(ControllerContext context)
        {
          Redirect.ExecuteResult(context);
          context.HttpContext.Response.StatusCode = 301;
        }
      }
    }
    
        2
  •  0
  •   stevemegson    14 年前

    原来,包含 PermanentRedirectResult ActionResult 或者其他应该用塑料袋包装的东西 ContentResult 这样地。。。

    return ((actionReturnValue as ActionResult) ??
      new ContentResult {
        Content = Convert.ToString(actionReturnValue, CultureInfo.InvariantCulture)
      });
    

    …和 (actionReturnValue as ActionResult) 永久直接结果 延伸错误 操作结果 ,即1.0程序集中的程序集,而不是2.0程序集中的程序集。

    更新引用以便 永久直接结果 2.0操作结果是否解决了问题。