RedirectToLocal not found

2019-04-03 16:45发布

问题:

I have this code :

using Solutionsecurity.web.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace Solutionsecurity.web.Controllers
{
    public class HomeController : Controller
    {


        public ActionResult Login() { 
        return View(new User());
        }

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(User u, string ReturnUrl) {

            if (Membership.ValidateUser(u.login, u.password))
            {
                return RedirectToLocal(ReturnUrl);
            }
            else {
                return View(u);
            }
        }

         [Authorize]
        public ActionResult Common()
        {
            return View();
        }
    }
}

I have no idea why the RedirectToLocal is not found !!! in this line :

return RedirectToLocal(ReturnUrl);

Any ideas?

回答1:

RedirectToLocal is not part of the framework. It is added in some of the MVC templates in the Account Controller:

This is taken from the MVC5 template AccountController:

private ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    else
    {
        return RedirectToAction("Index", "Home");
    }
}

If you want this method in all of your controllers, then you could easily add it as a protected method in a base controller, and have all of your controllers inherit from that base:

public abstract class BaseController : Controller
{
    protected ActionResult RedirectToLocal(string returnUrl)
    {
        if (Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
}

public class HomeController : BaseController
{
    // ...
}