.Net Core 3.1 上的 PUT 方法出现无法解释的 401 响应

     2023-03-10     60

关键词:

【中文标题】.Net Core 3.1 上的 PUT 方法出现无法解释的 401 响应【英文标题】:Unexplained 401 response from PUT method on .Net Core 3.1 【发布时间】:2021-05-18 09:15:03 【问题描述】:

我有一个非常有趣的问题。我有一个 .Net Core 3.1 Rest Web API。背景资料:

    我已根据我们的其他微服务正确配置了身份验证。 POST 正确验证并返回 200 OK PUT 操作返回 401 UnAuthorized 我在逐个路由的身份验证方面什么都不做

控制器sn-p:

[Route("flights")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class FlightsController : BaseController

    private readonly ILogger<FlightsController> _logger;
    private readonly IStringLocalizer _stringLocalizer;
    private readonly IWebHostEnvironment _environment;
    public FlightsController(ILogger<FlightsController> logger, 
                             IStringLocalizer stringLocalizer, 
                             IWebHostEnvironment environment)
    
        _logger = logger;     
        _stringLocalizer = stringLocalizer;
        _environment = environment;
    

    [HttpPost("OrderFlight")]
    public async Task<IActionResult> OrderFlight([FromBody] OrderFlightBindingModel model)
    
        return Ok(model);
    

    [HttpPut("OrderFlight")]
    public async Task<IActionResult> ValidateOtp([FromBody] CompleteOrderBindingModel model)
    
        return Ok(model);
    

启动服务配置sn -p:

//Configure Services
services.AddAuthentication(options =>

    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
)
.AddJwtBearer(options =>

    options.Authority = _config["JWT:Authority"];
    options.Audience = _config["JWT:Audience"];
    options.TokenValidationParameters = new TokenValidationParameters
    
        ValidateIssuerSigningKey = true,
        ValidateIssuer = true,
        ValidateLifetime = true,
        ValidateAudience = true
    ;
);
services.AddAuthorization();

启动配置sn-p:

//Configure
app.UseAuthentication();
app.UseAuthorization();

欢迎任何想法。我对 .Net Core API 非常熟悉,所以假设我已经正确完成了相关的 appsettings 工作,并且我没有错过任何事情,因为总共有 12 个左右的端点,并且只有一个 PUT 操作返回 401,即使auth 应用于整个控制器,而不是基于每个方法。我正在使用 VS Professional 和 Kestrel 在 Localhost 上进行调试。

【问题讨论】:

【参考方案1】:

您不需要使用 Put,因为某些浏览器不支持它。修复动作标题:

   [Route("OrderFlight")]
    public async Task<IActionResult> OrderFlight([FromBody] OrderFlightBindingModel model)
    
        return Ok(model);
    

    [Route("ValidateOtp")]
    public async Task<IActionResult> ValidateOtp([FromBody] CompleteOrderBindingModel model)
    
        return Ok(model);
    
and use OrderFlight or ValidateOtp in your url.

【讨论】:

这是一个有效的建议。但是,它甚至无法在移动设备或 .Net 控制台应用程序中运行的集成测试中运行。只有帖子有效。 你需要 Post 做什么?相信我。我从不明确使用这些方法。让浏览器选择一个方法。浏览器通常比开发人员更聪明。例如,浏览器通常选择 GET 进行删除,因为该操作通常看起来像 ... delete(int id)。如果你把 delete 属性放在某些情况下你也会有问题 @CaptainKenpachi - 但如果你喜欢阅读教科书并创建单元测试,请尝试 [HttpPut("ValidateOtp")]。它可能适用于单元测试。【参考方案2】:

好吧,我仍然无法解释这种行为,但至少我学到了一两件事:

通过 FlurlHttp 发送 PUT 请求返回 401。通过 PostMan 发送完全相同的请求按预期工作。我检查了三次,标题、URL、方法和正文都是相同的。所以

所以,这是我必须向 Flurl 开发人员提出的错误。由于 PUT 请求来自 PostMan,我相信它也可以像所有其他服务的 PUT OTP 请求一样工作,该请求共享相同的设置并且一直在我们的 UAT 和生产环境中工作。因此,我将创建一个 POST 端点来明确测试它(这在技术上是一件坏事,但最终我更关心工作软件而不是 DRY 原则)。

【讨论】:

不记名令牌出现 401 错误 - asp.net core 3.1

...】:我无法使用由Asp.netCore生成的令牌授权访问受保护的方法。Startup.cspublicvoidConfigureServices(IServiceCollectionservices)services.Configur 查看详情

如何将xml输入(请求)传递给.net core 3.1上的Web api

】如何将xml输入(请求)传递给.netcore3.1上的Webapi【英文标题】:Howtopassxmlinput(request)toWebapion.netcore3.1【发布时间】:2020-05-0317:11:02【问题描述】:我有一个.netcore3.1webapi。我已经尝试了以下方法,但是当它碰到它时它总是显示为... 查看详情

PUT 请求抛出 403 CORS 错误 Asp.Net Core 3.1 + Vue3 +IIS10

】PUT请求抛出403CORS错误Asp.NetCore3.1+Vue3+IIS10【英文标题】:PUTrequestsarethrowing403CORSerrorAsp.NetCore3.1+Vue3+IIS10【发布时间】:2022-01-1820:07:30【问题描述】:我花了一整天的时间试图找到解决方案,并在这些SOF帖子here、here和here中尝试... 查看详情

.NET Core 3.1 + Angular 上的 PreflightMissingAllowOriginHeader CORS 错误

】.NETCore3.1+Angular上的PreflightMissingAllowOriginHeaderCORS错误【英文标题】:PreflightMissingAllowOriginHeaderCORSerroron.NETCore3.1+Angular【发布时间】:2021-07-2712:27:38【问题描述】:我正在.NETCore3.1+Angular上开发一个应用程序,直到最近,当我尝试... 查看详情

仅在 .NET5 上的 PUT 上出现 CORS 问题

】仅在.NET5上的PUT上出现CORS问题【英文标题】:CORSissueonlyonPUTon.NET5【发布时间】:2021-05-0214:53:05【问题描述】:我在尝试向我的.NET5WebAPI发出PUT请求时收到Cross-OriginRequestBlocked:TheSameOriginPolicydisallowsreadingtheremoteresourceathttps://mysitea... 查看详情

在 .Net Core 3.1 上发布时未使用新 ViewModel 重新加载表单

...-2401:43:02【问题描述】:我试图在调用post方法后更改屏幕上的值。即使使用ModelState.Clear();方法添加它仍然没有反映屏幕上的新值。请注意,我使用的是jQueryUnobtrusiveAJ 查看详情

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

】从.NETCore2.2迁移到3.1后,EFCore随机抓取API请求上的用户表【英文标题】:EFCorerandomlycrawlsusertablesonAPIrequestsaftermigratingfrom.NETCore2.2to3.1【发布时间】:2021-12-3003:42:02【问题描述】:从.NETCore2.2迁移到3.1后,EFCore会随机开始爬取用户... 查看详情

迁移到 .net core 3.1 后 EF OrderBy 出现问题

】迁移到.netcore3.1后EFOrderBy出现问题【英文标题】:ProblemwithEFOrderByaftermigrationto.netcore3.1【发布时间】:2019-12-1517:26:28【问题描述】:考虑这段代码:_dbContext.Messages.GroupBy(m=>newMinId=m.SenderId<=m.RecipientId?m.SenderId:m.RecipientId,M 查看详情

调用put时出错,删除dot net core中的方法

】调用put时出错,删除dotnetcore中的方法【英文标题】:gettingerrorwhencallput,deletemethodsindotnetcore【发布时间】:2021-11-2316:57:46【问题描述】:当调用put、delete方法时我收到此错误No\'Access-Control-Allow-Origin\'但get、post方法没有错误当在... 查看详情

asp.net core api PUT 请求从不命中方法

】asp.netcoreapiPUT请求从不命中方法【英文标题】:asp.netcoreapiPUTrequestneverhitsmethod【发布时间】:2021-02-1513:07:18【问题描述】:我正在尝试在asp.net中创建一个webapi。我正在尝试使用ajax将我的查询参数发送到操作方法,但它从未到... 查看详情

Asp.Net Core Razor Page PUT Handler 模型绑定器未绑定来自 ajax put 上的 java 脚本的序列化表单

】Asp.NetCoreRazorPagePUTHandler模型绑定器未绑定来自ajaxput上的java脚本的序列化表单【英文标题】:Asp.NetCoreRazorPagePUTHandlermodelbindernotbindingtheserializedformfromjavascriptonajaxput【发布时间】:2019-12-1005:16:51【问题描述】:我正在尝试序列化... 查看详情

在 .NET Core 3.1 中添加窗口身份验证后出现 Cors 错误

】在.NETCore3.1中添加窗口身份验证后出现Cors错误【英文标题】:CorsErrorAfteraddingwindowauthenticationin.NETCore3.1【发布时间】:2021-07-1709:52:29【问题描述】:WepAPI工作正常,但添加身份验证中间件后开始抛出CORS错误,下面是startup.cs代... 查看详情

部署到应用服务 .Net Core 3.1、React 后出现 413 错误

】部署到应用服务.NetCore3.1、React后出现413错误【英文标题】:413errorafterdeployingtoappservice.NetCore3.1,React【发布时间】:2021-12-1300:47:32【问题描述】:我有一个允许上传pdf文件的API。如果我尝试上传超过30mb的文件,则会在azure日志... 查看详情

ASP.NET Core 3.1 - 将子项添加到剃刀局部视图

...我的问题是当代码进入OnGetAddNewChildItem方法时,PageModel类上的绑定属性为空(它不是null 查看详情

单击提交按钮未命中剃须刀页面.net core 3.1上的服务器端代码

】单击提交按钮未命中剃须刀页面.netcore3.1上的服务器端代码【英文标题】:Clickingonthesubmitbuttonnothittingtheserversidecodeonrazorpages.netcore3.1【发布时间】:2021-09-2821:11:03【问题描述】:我正在处理一个.netcore3.1razorpages项目,我有一个... 查看详情

Asp.Net Core 3.1 控制器方法未调用

】Asp.NetCore3.1控制器方法未调用【英文标题】:Asp.NetCore3.1Controllermethodnotcalling【发布时间】:2021-09-1917:39:42【问题描述】:我有Asp.netcore3.1目标应用程序。所以基本上HomeController我们正在使用与视图相关的动作触发器,它工作正... 查看详情

从 3.1 升级后的 .NET Core 5.0 Azure 部署 CORS 问题

...09:33:15【问题描述】:部署后,我的Angular+.NETCore应用程序出现CORS问题,我不确定如何解决。当我尝试访问API端点时会出现以下消息,并且仅在我将版本从3.1升级到5.0后才会出现。已被CORS 查看详情

带有负载均衡器的 AWS Elastic Beanstalk Linux 托管实例上的 ASP.NET Core 3.1 - HTTPS

】带有负载均衡器的AWSElasticBeanstalkLinux托管实例上的ASP.NETCore3.1-HTTPS【英文标题】:ASP.NETCore3.1onAWSElasticBeanstalkLinuxmanagedinstanceswithloadbalancer-HTTPS【发布时间】:2021-05-3107:59:43【问题描述】:我已经设置了一个AWSElasticBeanstalk环境。... 查看详情