0
public class CheckoutController : Controller
{
    string userID;

    public CheckoutController()
    {
        userID = User.Identity.Name;
    }
    ...
}

当我运行上面的代码时,我得到了这个错误,

**Make sure that the controller has a parameterless public constructor.**

在那个类中,大多数方法都需要那个用户ID,所以我想在构造函数中定义那个值,我该如何解决这个问题?

[编辑]

public class CheckoutController : Controller
{
    string userID;

    public CheckoutController()
    {
      //None
    }
}

此代码工作正常,没有错误。

4

1 回答 1

3

与执行管道相关的值(RequestResponseUserController的构造函数方法之后绑定。这就是为什么你不能使用User.Identity它,因为它还没有绑定。只有在第 3 步之后:IController.Execute()才是那些上下文值被初始化的时候。

http://blog.stevensanderson.com/blogfiles/2007/ASPNET-MVC-Pipeline/ASP.NET%20MVC%20Pipeline.jpg

更新海报: 感谢@SgtPooki,根据@mystere-man 的反馈链接到更新的海报。但是我在这里保留了较旧的可嵌入图像,以使其更容易参考。

ASP.NET MVC 管道

User.Identity.Name不会对性能产生负面影响,因为它已经FormsAuthentication由 ASP.NET 运行时从 cookie 中解密(假设您正在使用FormsAuthentication您的 Web 应用程序)。

所以不要费心将它缓存到类成员变量中。

public class CheckoutController : Controller
{
    public CheckoutController() { /* leave it as is */ }

    public ActionResult Index()
    {
        // just use it like this
        string userName = User.Identity.Name;

        return View();
    }
}
于 2013-04-17T20:23:13.580 回答