相关疑难解决方法(0)

使用AuthorizeAttribute时最初设置ReturnUrl参数的内容

在ASP.NET MVC项目中,当您使用[Authorize]修饰类或方法并且授权失败时,该站点会自动重定向到登录页面(使用web.config中指定的loginUrl).此外,ASP.NET MVC框架中的某些内容将原始请求的URL作为ReturnUrl参数传递.

什么负责追加这个ReturnUrl?我在项目模板中找不到任何代码.我还看了一下ASP.NET栈源代码中的AuthorizeAttribute 代码,但在那里找不到任何东西.我也尝试在整个ASP.NET堆栈源代码中搜索"returnurl"但找不到任何东西.

我问的原因是我在这个过程中发现了一个错误.您可以通过全新的Internet ASP.NET MVC项目看到这一点.在web.config中将FormsAuth超时设置为1分钟,然后登录.等待一分钟后尝试注销.这将重定向到具有/ account/logoff的ReturnUrl的登录页面,登录后会导致404.我现在使用自己的AuthorizeAttribute解决了这个问题:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.Result is HttpUnauthorizedResult)
        {
            string returnUrl = null;
            if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", System.StringComparison.CurrentCultureIgnoreCase))
                returnUrl = filterContext.HttpContext.Request.RawUrl;

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
            {
                { "client", filterContext.RouteData.Values[ "client" ] },
                { "controller", "Account" },
                { "action", "Login" },
                { "ReturnUrl", returnUrl }
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想看看源代码,看看我是否可以弄清楚为什么这个bug存在,如果它确实是一个bug.

asp.net-mvc

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

从 netcore 2 中的 Url 禁用/删除 '?ReturnUrl='

我试图找到一种方法来阻止我的 aspnetcore 应用程序将“?ReturnUrl=”添加到 URL。有谁知道怎么做,使用某种中间件。

我尝试像下面那样做,但没有任何效果:

public class RequestHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public RequestHandlerMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if(context.Request.QueryString.HasValue && context.Request.QueryString.Value.Contains("?ReturnUrl="))
        {
            context.Request.QueryString = new QueryString(string.Empty);
        }
        await _next.Invoke(context);
    }
}

public static class RequestHandlerMiddlewareExtension
{
    public static IApplicationBuilder UseRequestHandlerMiddleware(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestHandlerMiddleware>();
    }
}
Run Code Online (Sandbox Code Playgroud)

注册startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/error");
    }

    app.UseDefaultFiles();
    app.UseStaticFiles();

    app.UseAuthentication();
    app.UseRequestHandlerMiddleware();

    app.UseMvc(routes …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core asp.net-core-2.0

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

标签 统计

asp.net-core ×1

asp.net-core-2.0 ×1

asp.net-mvc ×1

c# ×1