asp.net-mvc - 干燥 ASP.NET MVC 操作 : ApplicationController or Service?

标签 asp.net-mvc asp.net-mvc-3 dry service-layer applicationcontroller

我正在编写一个 ASP.NET MVC 3 应用程序,我发现自己在我的操作方法中经常写这行代码:

var user = _session.Single<User>(u => u.UserName == User.Identity.Name);

(显然与AuthorizeAttribute一起使用)

还有其他一些经常重复的事情,但这个是最突出的,我最终有 3 个彼此相邻的操作,每个都需要检索授权用户。

所以这需要干燥:

  1. 我应该编写一个 ApplicationContoller,所有其他 Controller 都从中继承并公开一个 User 属性,还是应该将其添加到我的 IAdminService 并将其公开为方法?

  2. 在 ASP.NET MVC 中,ApplicationController 是应该避免还是应该接受的东西?

最佳答案

如果您发现自己在重复此逻辑,那么针对 User 类型的自定义模型绑定(bind)器可能会有所帮助:

public class UserModelBinder : DefaultModelBinder
{
    private readonly ISession _session;
    public UserModelBinder(ISession session)
    {
        _session = session;
    }

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var username = controllerContext.HttpContext.User.Identity.Name;
        return _session.Single<User>(u => u.UserName == username);
    }
}

一旦注册了 Binder ,您的 Controller 操作可能如下所示:

[Authorize]
public ActionResult Foo(User user)
{
    // ...
}

关于asp.net-mvc - 干燥 ASP.NET MVC 操作 : ApplicationController or Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601189/

相关文章:

c# - 如何让所有静态文件如css/images/js文件不被asp.net mvc处理?

c# - 通过 WIF 在 MVC 应用程序之间共享身份验证

c# - 如何仅在满足特定条件时自动增加复合键 ID?

c# - Controller 中的 Controller ?

dry - 在编译时运行 Nim 代码

java - 避免 Java 库中 2 个以上相似子类中的重复方法定义

C++重载括号运算符以在初始化后构造类/对象?

c# - 将 json null 发送到 Controller 会导致包含 0 个元素的列表

c# - 路由,如果包含单词则匹配特定的url

c# - 如何在 PartialViews 内连接使用 HtmlHelper 扩展生成的 JavaScript 并添加到父 View ?