首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# .NET核心Web API,抛出一个AuthorizationException,客户端得到500分。我如何让它返回401呢?

要让C# .NET核心Web API在抛出AuthorizationException时返回401状态码,可以通过以下步骤实现:

  1. 在Web API项目中,找到处理异常的代码段。通常,这个代码段位于Startup.cs文件的Configure方法中的异常处理中间件中。
  2. 在异常处理中间件中,找到处理AuthorizationException的代码块。这个代码块可能使用app.UseExceptionHandlerapp.UseStatusCodePages等方法。
  3. 在处理AuthorizationException的代码块中,将返回的HTTP状态码从500修改为401。可以使用HttpContext.Response.StatusCode属性来设置状态码,将其设置为401即可。

以下是一个示例代码片段,展示了如何修改异常处理中间件以返回401状态码:

代码语言:txt
复制
app.UseExceptionHandler(errorApp =>
{
    errorApp.Run(async context =>
    {
        var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
        if (exceptionHandlerPathFeature?.Error is AuthorizationException)
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsync("Unauthorized");
        }
        else
        {
            context.Response.StatusCode = 500;
            await context.Response.WriteAsync("Internal Server Error");
        }
    });
});

通过以上修改,当抛出AuthorizationException时,客户端将收到返回的401状态码和"Unauthorized"消息。

请注意,以上代码只是示例,实际应用中可能需要根据项目的具体情况进行适当的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Shiro系列 | 《Shiro开发详细教程》第六章:Shiro之Realm高级篇

Principal 那么直接返回即可,如果有多个 Principal,则返回一个(因为内部使用 Map 存储,所以可以认为是返回任意一个); oneByType / byType 根据凭据的类型返回相应的...AuthenticationException: 如果登录成功调用 isAuthenticated 就会返回 true,即已经通过身份验证; 如果 isRemembered 返回 true,表示是通过记住功能登录的而不是调用...isAuthenticated/isRemembered 是互斥的,即如果其中一个返回 true,另一个返回 false。...验证失败时抛出 AuthorizationException 异常。...) throws AuthorizationException; isPermitted 进行权限验证,验证后返回 true/false;而 checkPermission 验证失败时抛出 AuthorizationException

1.3K41

Shiro框架学习,Realm及相关对象

Principal那么直接返回即可,如果有多个Principal,则返回一个(因为内部使用Map存储,所以可以认为是返回任意一个);oneByType / byType根据凭据的类型返回相应的Principal...AuthenticationException,如果登录成功调用isAuthenticated就会返回true,即已经通过身份验证;如果isRemembered返回true,表示是通过记住功能登录的而不是调用...isAuthenticated/isRemembered是互斥的,即如果其中一个返回true,另一个返回false。 3、角色授权验证 Java代码 ?...*验证失败时抛出AuthorizationException异常。...permissions) throws AuthorizationException; isPermitted*进行权限验证,验证后返回true/false;而checkPermission*验证失败时抛出

51540
  • gRPC在C#中的未来属于grpc-dotnet

    2019 年 9 月,我们宣布[3]了一个新的gRPC C#实现[4]的普遍可用性,它不再基于 gRPC C 核心原生库,而是使用了在.NET Core 3 和 ASP.NET Core 3 中添加的...的实现更加敏捷,贡献更加友好——因为它在内部是基于众所周知的原语/API(ASP.NET 核心服务 API 和 HTTP2 客户端),它是用纯 C#实现的,代码对 C#开发人员更容易访问(对只想了解事情如何工作的用户和可能编写...花费了宝贵的资源,我们相信工程时间应该花在 C#中的 gRPC 更容易使用和添加新功能(当然还有修复 bug)上,而不是需要在两个不同的代码库上工作,它们都服务于同一个目的。...通过与.NET 社区保持一致, gRPC 的 C#/.NET 实现面向未来。...Grpc.Core.Api 包是 grpc-dotnet 的先决条件,因此它将有可能随着时间的推移而演变(但它是一个C# API 包,因为只包含公共 API 表面,更改是非常少的)。

    2K40

    别了,JavaScript;你好,Blazor

    .NET切入Web开发的一个特殊优势,就是有了可以替换npm和WebPack的工具。 作为一个多年的.NET程序员,可以向NuGet(包管理程序)和MSBuild招手了。...Blazor非常震撼的是使用起来非常简单。公平地说,承认Blazor的生态还不够完善,大量的利用前端技术圈的成果的开源项目正在不断涌现。...Blazor把简单易用的Razor(UI)与其他.NET核心概念组合起来:依赖注入、配置、路由。...是不是使用C#开发Web 你激动, WebAssembly及ASP.NET Core的Blazor等框架就值得投入一些时间了?...至少学了那么多年.NET,现在终于可以用它来更快地做Web开发了,还是很值得炫耀的,这也是有动力写这篇文章的原因。不仅如此,其实也很熟悉JavaScript,而且还在不断学习。

    3.1K30

    《Apache Shiro 源码解析》- 3.身份验证与授权

    DefaultWebSecurityManager:必须在 Web 环境中运行,毕竟的类名中就带有 Web 这个关键词。...例如,我们的系统公开了一个付款 API 接口,外部程序可以调用此 API 进行支付。...那么,令牌具体的加密过程是如何实现的? Shiro 在内部提供了一组加密和解密算法,用来确保令牌的安全性,详细的过程,我们在“加密与解密”这一章进行描述。...如果用户缺少指定权限,将抛出 AuthorizationException。 @RequiresRoles 要求当前用户具备指定的角色才能访问方法或类。...如果用户没有该角色,将抛出 AuthorizationException。 @RequiresUser 要求当前用户是已知用户,换言之,用户必须已经登录过(包括“记住”用户)才能访问资源。

    10710

    Compilify——让你在浏览器中编译.NET代码

    Compilify是一款以服务形式出现的在线编译器,其创始人是Justin Rusbatch,运行在Roslyn CTP[1]之上。从最近开始,得到来自.NET社区的大量关注。...使用ASP.NET工作了一年,不过MVC框架一经问世就转移到了上面,而且从那时起已用MVC框架开发了好几个网站。...InfoQ:当键入代码时,编辑器几乎会在瞬间做出响应,尽管如此,这仍需一次到服务器的往返行程,你是如何做到的? Justin: 验证用户代码的过程会在输入完成后0.5秒开始。...任何错误都会返回客户端,并显示给用户。 InfoQ:粗算一下,你花了多少时间或精力来构建此项目? Justin: 在推出Compilify之前,在此项目上工作了一周半的时间。...用于AppHarbor的附加组件New Relic确实可以轻松监视Web服务器和后台工作服务器的负载。

    1.3K80

    向ASP.NET Core迁移

    有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来。是不是要转Java? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景。...而在.NET Core实现跨平台之后,自动化的门槛降到最低。你不再需要一个资深的架构师或者专业的DevOps才可以实现,一个有经验肯学习的开发者足以应付。 ? 如何来做升级和改造 ?  ...如果没有使用服务器端控件,用handller在返回数据,则可以考虑先将Web Form的项目进行前后端分离或者API 分离,在视图层逻辑不变的情况下重写后端逻辑部分。...这里的问题是要解决认证授权的问题包括(从客户端到Core API,以及从Core API到原来的Web API) ?...ASP.NET Core依赖注入全知道: https://mp.weixin.qq.com/s/lR9O7bXiI704kSu7bKdLGg 心中的ASP.NET Core新核心对象之WebHost(

    1.5K60

    C#.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件】

    以前给大家分享了一个C#/.NET的网络组件–RestSharp,具体请参考:推荐一个.NET(C#)的HTTP辅助类组件–restsharp 今天再给大家示范一下如何应用RestSharp这个网络组件来实现可跨域的文件上传功能...本项目由一个客户端一个ASP.NET WEB API 2来演示。客户端主要用于模拟用户的上传文件操作,而WEB API则是来接收用户上传的文件。在这里,只贴出这两个部分的核心代码。...首先是WEB API(RestSharpUploadFileController.cs): using System.Collections.Generic; using System.Net; using...:WEB API的默认返回类型设置成了JSON格式的,这个设置只需要修改一下Global.asax.cs文件即可,修改后的Global.asax.cs文件如下: using System.Net.Http.Formatting...最后,如果你喜欢这篇文章,或者是觉得文章内容对你有帮助的话,那就请动动你的手,为点个赞吧^_^ 本文同步发布至:图享 » C#/.NET RestSharp网络组件实现上传文件到远程服务器【可跨域传文件

    4.2K100

    完善你的Laravel异常处理

    这篇文章我们来简单梳理一下Laravel中提供的异常处理能力,然后讲一些在开发中使用异常处理的实践,如何使用自定义异常、如何扩展Laravel的异常处理能力。...,这让开发者能够捕获这些运行时异常并根据自己的需要来做后续处理(比如:在catch中调用另外一个补救方法、记录异常到日志文件、发送报警邮件、短信) 在这里列一些开发中常遇到异常,并说明他们是在什么情况下被抛出的...public function render($request, Exception $exception) { //如果客户端预期的是JSON响应, 在API请求未通过Validator验证抛出...ValidationException后 //这里来定制返回客户端的响应....见过很多人在 Repository或者 Service类的方法中会根据不同错误返回不同的数组,里面包含着响应的错误码和错误信息,这么做当然是可以满足开发需求的,但是并不能记录发生异常时的应用的运行时上下文

    2.8K20

    FastAPI 中的 OAuth2PasswordBearer 授权

    在构建现代 Web 应用程序时,身份验证和授权 是两个不可避免的核心问题。FastAPI 提供了一种简洁而强大的方式来处理身份验证,特别是通过 OAuth2 这种标准协议。...假设客户端通过发送一个 Bearer token (通常是通过密码登录获取的)来请求资源。这个 token 可以用于访问受保护的 API。...核心工作流程 客户端请求 token,提供 用户名 和 密码。 服务器验证凭据,如果有效,则返回 access token。 客户端使用该 token 来请求受保护的资源。...模拟登录获取 Token 要完成 OAuth2 的授权流程,我们需要定义一个 token endpoint,客户端可以通过来请求 token。...如果 token 无效,则抛出 401 Unauthorized 错误。 5.

    15210

    一系列令人敬畏的.NET核心库,工具,框架和软件

    Butterfly Server .NET – 允许用最少的工作量构建实时Web应用程序和本机应用程序。定义Web API和Subscription API,以自动同步所连接客户端的数据集。...它以100%C#代码实现。自9.1以来的Pos​​tgreSQL版本得到官方支持,其他版本可能有效。...守望者守在手表上。 WebEssentials.AspNetCore.ServiceWorker – ASP.NET核心渐进式Web应用程序。...Xabe.FFmpeg – 用于FFmpeg的.NET标准包装器。允许在不知道FFmpeg如何工作的情况下处理媒体,并且可以用于将自定义参数传递给来自C#应用程序的FFmpeg。...Binance.Net – Binance Web API的.Net API包装器。 CakeMail.RestClient – CakeMail API客户端

    18.6K30

    Blazor资源大全,很棒的Blazor(3)

    但更深层次的是,网页上的某些元素受益于客户端,某些元素受益于服务器端,为什么您只能选择一个?时长:53分钟。...Jeff深入探讨了KlipTok的一些棘手之处,主要涉及快速索引和搜索以找到正确的剪辑。对各种数据存储技术和使用云的讨论不会你失望。...电子书 Blazor WebAssembly 简明指南 - 2020年8月31日 - Blazor 是一个使用 C# 语言编写的 Razor 技术创建 SPA 网页的框架,支持客户端和服务器端架构。...Blazor 编程 - ASP.NET Core 3.1 - 在 Udemy 上使用 C# 创建交互式 Web 应用程序的课程。...Blazor 入门 - 2019年12月 - 通过实际操作的方式学习如何使用 Blazor,这是微软使用 C# 编写交互式 Web UI 的解决方案,无需使用 JavaScript。

    42240

    C# 跨设备前后端开发探索

    一个最简单的云驱动的软件需要至少一个 Web 后端、一个桌面端和一个移动端。 还没开始,就这么复杂。...我们自己就是用户,用户看得到的部分才是最具有可玩性的。这就是指客户端或者 Web 前端。 我们现在要拿 C#客户端,一般 C# 或者 .NET 的开发者拿什么来写桌面客户端?...关于使用 Xamarin.Forms 开发一个键盘扩展,可以阅读的另一篇博客: 使用 Xamarin 开发 iOS 键盘扩展(含网络访问) Web 前端 于是,我们仅仅使用 C# 还有客户端开发者熟悉的...这三个端中,有两个都是客户端,于是就会存在向用户分发客户端的问题。虽然可以用户去商店下载,但是提供一个官方下载页面可以用户在一处地方找到所有端的下载和部署方法。 这需要使用到前端。...然而如何使用 C# 代码来编写去前端? 使用 CSHTML5!

    26730

    C#.NET Web 部分复习总结(面试常问)

    C# .NETC#有什么区别 .NET一般指 .NET FrameWork框架,它是一种平台,一种技术。理论上,各种语言都可以编译成的IL,在上面运行。.NET开发,就是把当作目标平台的开发。...在C#中,委托的作用是这样描述的:委托就像一个函数的指针,在程序运行时可以使用它们来调用不同的函数。 简单的委托 那委托需要承载哪些信息?...首先,存储了方法名,还有参数列表(方法签名),以及返回的类型。比如: delegate string/*返回类型*/ ProcessDelegate(int i); 这就是一个委托的定义。...其执行过程如下: 用户在客户端一个网址输入到浏览器的地址栏,请求一个Web网页。 Web浏览器向Web服务器发送Web网页请求,称为Request(请求)。...使用Session变量 使用Server.Transfer 如和 JavaScript 按 ID 访问 ASP.NET 控件 从客户端脚本访问控件的一种方法是将服务器控件的 ClientID 属性值传递给

    1.4K21

    《CLR via C#》笔记:第5部分 线程处理(2)

    然后,Windows 会唤醒你的线程,把调度给一个CPU,使它从内核模式返回用户模式,再返回至托管代码(⑦,⑧和⑨)。...所以,当返回void 的异步函数抛出未处理的异常时,编译器生成的代码将捕捉,并使用调用者的同步上下文(稍后讨论)重新抛出。如果调用者通过GUI线程执行,GUI线程最终将重新抛出异常。...2、要构建异步ASP.NET MVC 控制器,使你的控制器类从System.Web.Mvc.AsyncController派生,操作方法返回一个 Task即可。...4、要构建异步 WCF服务v将服务作为异步函数实现,返回Task或Task。...事实上,Windows Runtime没有提供以同步方式执行IO操作的任何API。幸好,可以使用C#的异步函数功能简化调用这些API时的编码。

    1.1K40

    GraphQL

    的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。...总结的好处: 在的设计思想中,GraphQL 以图的形式将整个 Web 服务中的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...是什么放弃了restful api?了解清楚后全面拥抱GraphQL GraphQL执行逻辑 有人会问: 使用了GraphQL就要完全抛弃REST了吗? GraphQL需要直接对接数据库吗?...这样一来,只要是数据源有的数据, GraphQL 层都可以客户端按需获取,不必专门再去定接口了。...客户端实现 在客户端,Graphql Client目前有下面的语言支持: C# / .NET Clojurescript Elm Flutter Go Java / Android JavaScript

    2.6K65

    为什么要放弃RESTful,选择拥抱GraphQL

    的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。...总结的好处: 在的设计思想中,GraphQL 以图的形式将整个 Web 服务中的资源展示出来,客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要后端多次修改了。...是什么放弃了restful api?了解清楚后全面拥抱GraphQL GraphQL执行逻辑 有人会问: 使用了GraphQL就要完全抛弃REST了吗? GraphQL需要直接对接数据库吗?...这样一来,只要是数据源有的数据, GraphQL 层都可以客户端按需获取,不必专门再去定接口了。...客户端实现 在客户端,Graphql Client目前有下面的语言支持: C# / .NET Clojurescript Elm Flutter Go Java / Android JavaScript

    2.4K40

    .NET周报 【6月第3期 2023-06-18】

    觉得这种观念是不对的,东西做出来就是人用的。准确看待一件事情,需要有一个大局观和整体观,而大局观和整体观,就避免不了去触碰 CSharp 里的 unsafe 部分。...说实话这东西理论相信很多朋友都知道,就是将文件映射到进程的虚拟地址,说起来很容易,那如何大家眼见为实?可能会难倒很多人,所以这篇以自己的认知尝试大家眼见为实。...3XX的响应促使客户端像另一个地址再次发起请求,本章将此称为“客户端重定向“。...-42lk 了解如何利用 Dapr 状态管理来实现 ASP.NET Core Web API 应用程序。...如何将 ChatGPT API 的响应作为流处理(一种逐字逐渐返回响应的格式)。

    22920

    异步陷阱之IO篇

    很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步。...这里抛出一个实际项目中遇到的陷阱,先简单交代一下故事背景:SpreadJS产品有一个Excel IO部件,是一个ASP.NET MVC Web API(MVC4)应用,用来导入Excel文件到SpreadJS...根据用户的代码,可以分析得到一些关键信息: 1、用户在很短时间内快速提交了多个请求并上传文件; 2、返回结果会随机出现IO错误; 由此可以得出结论:应该是服务器处理上传的Excel...在ASP.NET WEB API中,处理上传文件的思路和方法如下: var root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider...以上分析了问题,但如何解决(某PM话外音:那谁谁,快点啊,客户催着呢),很简单,去除调这个异步IO就可以了,好吧,代码一点也不简单,重写这个GetStream方法,保证获取的FileStream使用同步

    1.2K70
    领券