相关疑难解决方法(0)

如何在ASP.NET MVC 2中的每个控制器操作之前获取某些代码?

我想检查一些关于会话状态,用户代理等的事情,并且可能采取行动并在控制器方法有机会执行之前返回特殊视图.例如:

最常见的:
用户请求Home/Index
System检查以确保x!= 0.
x不等于零,因此Home/Index控制器执行正常.

但是,有时候:
用户请求Home/Index
System检查以确保x!= 0.
x DOES等于零.必须通知用户,并且不能允许执行所请求的控制器操作.

认为这涉及ActionFilters的使用.但我已经阅读过它们,我不明白我是否可以抢占控制器方法并在执行之前返回一个视图.我确信我可以在控制器方法运行之前执行代码,但是如何防止它在某些情况下运行并返回自定义视图,或者直接转到不同的控制器方法?

更新:我实施了RM的解决方案.这就是我做的:

public class MyAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (myValue == wrongValue)
        {
            filterContext.Result = new ViewResult{ViewName = "Notice"};
        }
        base.OnActionExecuting(filterContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当myValue出错时,这些用户将获得Notice视图,并且永远不会执行所请求的控制器.为了完成这项工作,我将它应用于我所有控制器继承的ControllerBase.

asp.net-mvc

37
推荐指数
1
解决办法
2万
查看次数

在每个控制器操作之前/之后执行代码

我有一个ASP.NET MVC应用程序,我想记录事件.我已经有了一个包含我需要的所有工具的Log类,但我必须实例化并明确地关闭它(因为它打开文件,所以我不能依赖GC).我的行为如下:

public ActionResult MainMenu()
{
    CreateLog();

    // Do controller stuff
    Log(message);
    // Do more controller stuff

    CloseLog();
    return View(mModel);
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用一个using块,但它只是一点点侵入性,它会产生异常处理的麻烦.我已经阅读过ActionFilters,我可以使用它创建和关闭我的日志,但后来我无法访问方法内的Log对象.

你有什么建议吗?我怎么能避免重复代码?

c# asp.net asp.net-mvc

10
推荐指数
1
解决办法
2万
查看次数

MVC CORE 2.0.0在每个页面上运行c#代码

每次查看基于_layout.cshtml的任何页面时,我都需要运行一些c#代码.我不想在每个controller.cs文件中添加一些东西,就像你曾经在ASP.NET的MasterPage.cs中使用的一样.

无法得到这个

在MVC,C#中的每个请求中运行一个方法?

或这个

Asp.Net Core中的@ Html.Action

运行,不知道是不是因为它们不是CORE 2.0.0,我只是遇到了很多编译错误.我想做的就是能够运行这样的代码

public class myClass {
    public static bool returnTrue() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

每次加载每个页面.

asp.net-mvc-2 asp.net-core-mvc

1
推荐指数
1
解决办法
948
查看次数