Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net core 3.1未经授权的401重定向到未经授权的razorpage不工作_Asp.net_Asp.net Core_Asp.net Core 3.1 - Fatal编程技术网

asp.net core 3.1未经授权的401重定向到未经授权的razorpage不工作

asp.net core 3.1未经授权的401重定向到未经授权的razorpage不工作,asp.net,asp.net-core,asp.net-core-3.1,Asp.net,Asp.net Core,Asp.net Core 3.1,我不熟悉.net core,但已经在asp.net中开发了几年。我有一个网站的核心,是基于Windows广告的身份验证。我使用广告组来控制访问,我的razor索引页是为广告组设置的 [Authorize(Policy = "ADRoleOnly")] 当不属于该组的用户尝试访问razor索引页时,他们会得到403拒绝。我正试图弄清楚如何将它们重定向到我设置为“/未成功”的razor页面。此“/unAuthAccess”razorpage设置为 [AllowAnonymous

我不熟悉.net core,但已经在asp.net中开发了几年。我有一个网站的核心,是基于Windows广告的身份验证。我使用广告组来控制访问,我的razor索引页是为广告组设置的

[Authorize(Policy = "ADRoleOnly")]
当不属于该组的用户尝试访问razor索引页时,他们会得到403拒绝。我正试图弄清楚如何将它们重定向到我设置为“/未成功”的razor页面。此“/unAuthAccess”razorpage设置为

[AllowAnonymous]
我还验证了广告组中的用户可以很好地查看这个“/unuthaccess”页面,以及不属于获得403的广告组的用户,因此allowanonymous正在为/unuthaccess页面工作

因此,我不知道当任何用户点击我使用策略设置的任何页面时,如果他们没有查看该页面的权限,在何处或如何进行重定向

[Authorize(Policy = "ADRoleOnly")]
我在Startup.cs中尝试了以下401和403状态

app.UseStatusCodePages(async context =>
{
    if (context.HttpContext.Response.StatusCode == 401)
    {
         app.Use(async (context, next) =>
         {
               context.Request.Path = "/UnAuthAccess";
               await next();
         });
    }
 });
这不管用,所以我试了一下

 app.UseStatusCodePagesWithRedirects("/Errors/{0}");
当razor页面设置为“/Errors/401”和“/Errors/403”时,我记不起该设置为哪一个,并捕获用户的未经授权访问

无论哪种方式,用户都不会被重定向到我的razorpage,我只会收到一条标准浏览器HTTP错误403拒绝消息

只是想寻求有关重定向在core中如何工作的帮助???我是否应该直接从razor页面cs/后端代码中执行重定向?如果是,如何

我使用Global.asax在旧的asp.net 4.x中使用此方法,但此方法在core中不起作用:(


我想出来了,我得把线移走

app.UseStatusCodePagesWithRedirects("Errors/{0}");
到Startup.cs中的静态文件和路由调用之前

 if (env.IsDevelopment())
            {
                //sets ad domain and mail server for specific test environments
                misc.ad_domain = "corp.emc.com";
                misc.smtp_server = "mailhub.lss.emc.com";

                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
                //app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseStaticFiles();
            app.UseRouting();
            app.UseHttpsRedirection();       
            app.UseAuthentication();
            app.UseAuthorization();
是的,我知道我只是把它放在env.IsDevelopment中进行调试测试。我希望这能帮助其他人从以前的.net迁移到asp.net core中。我知道这是我学习Startup.cs的一个过程

 if (env.IsDevelopment())
            {
                //sets ad domain and mail server for specific test environments
                misc.ad_domain = "corp.emc.com";
                misc.smtp_server = "mailhub.lss.emc.com";

                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseStatusCodePagesWithRedirects("/Errors/{0}");

                app.UseDeveloperExceptionPage();
                //app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseStaticFiles();
            app.UseRouting();
            app.UseHttpsRedirection();       
            app.UseAuthentication();
            app.UseAuthorization();

使用此设置,我必须将我的razor页面路径从“/unAuthAccess”更改为“Errors/401”,以使我的unauth页面显示:)

当您使用
应用程序时。UseStatusCodePages
,您是否调试以查看
响应的值。当用户未经授权时,StatusCode
的值?因此,调试时,我在Startup.cs行中设置了一个“如果(context.HttpContext.Response.StatusCode==401),它永远不会被命中,然后直接转到browser@mj1313你的帖子让我坐下来重新开始思考:)谢谢