专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-963-0016      微信咨询  |  联系我们

Global.asax中的拦截请求

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:07:23       共计:3628 浏览

我有一个使用MVC 4.5的ASP.NET MVC应用程序。我被指示将查询字符串授权放到应用程序中。该应用程序充当前端另一个应用程序的数据处理器。

我们决定在包含例如http://dr.appbox.us/DataReport/?passcode=HASHCODE的哈希码的请求URL中附加查询字符串。

可以检查HASHCODE,如果匹配,则允许进一步。 现在我在应用程序中有大约20个控制器,有没有办法可以检查HASHCODE在global.asax中是否有效并将用户从那里重定向到错误页面?

另外请告诉我是否有办法检查是否可以绕过应用程序中的Ajax请求的哈希码。

由于

4 个答案:

答案 0 :(得分:2)

您可以为此使用自定义操作过滤器。如果您创建一个继承自ActionFilterAttribute的新类并覆盖OnActionExecuting方法。在这里,您可以验证密码并在需要时重定向。

public class HashCodeCheckFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var passcode = filterContext.HttpContext.Request.QueryString["passcode"];
        // Validate passcode
        var valid = false;

        // If invalid then do some error processing
        if (!valid)
        {
            // Redirect to errro page....
            filterContext.Result = new RedirectToRouteResult("NameOfErrorRoute");
            return;
        }

        base.OnActionExecuting(filterContext);
    }
} 

然后,您可以在特定控制器/操作上将其用作属性:

[HashCodeCheckFilter]
public class HomeController : Controller
{
    // GET: Home
    [HashCodeCheckFilter]
    public ActionResult Index()
    {
        return View();
    }
} 

或者您可以在Application_Start(或App_Start / FilterConfig)中将其注册为适用于所有请求的全局过滤器:

GlobalFilters.Filters.Add(new HashCodeCheckFilterAttribute()); 

如果您不想检查请求是否是ajax请求,您可以检查请求中的HTTP_X_REQUESTED_WITH标头,看它是否等于xmlhttprequest

答案 1 :(得分:0)

  

有没有办法可以检查HASHCODE在global.asax中是否有效,并将用户从那里重定向到错误页面

我会使用更适合此的HttpHandler。 (参见文档here和here以及分步教程here)

  

另外请告诉我是否有办法检查是否可以绕过应用程序中的Ajax请求的哈希码。

您可以检查HttpContext.Current.Request.Headers["x-requested-with"]是否为XMLHttpRequest。然后它是一个AJAX调用,您可以跳过身份验证步骤。此外,您可以在第一次接收哈希码时设置会话变量,并在AJAX请求完成时检查该哈希码是否仍然有效。那么你将获得更好的安全性,然后再不检查它。

答案 2 :(得分:0)

听起来我应该考虑实现IAuthorizationFilter而不是尝试使用Global.asax。 IAuthorizationFilter的实现将在任何请求之前运行,如果哈希码无效,您可以选择执行该操作。

答案 3 :(得分:0)

由于你使用的是asp.net MVC,我会在你的应用程序中查看全局动作过滤器。您可以通过global.asax将操作过滤器注册为全局操作过滤器。

GlobalFilters.Filters.Add(new MyActionFilterAttribute()); 

在您的操作过滤器中,您可以放置代码来检查您的哈希值,每次在控制器上调用您的任何操作时都会执行此操作。

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(!filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
        {
            // CHECK HASH HERE
        }
        base.OnActionExecuting(filterContext);
    }
} 

查看这些资源以获取更多信息

http://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-global-action-filters https://msdn.microsoft.com/en-us/library/system.web.mvc.globalfiltercollection(v=vs.98).aspx

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Nginx解决跨域、大文件、负载均衡和域名管理的问题(亲测真实有效) | ·下一条:nginx代理访问swagger

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有