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

Posted

技术标签:

【中文标题】调用put时出错,删除dot net core中的方法【英文标题】:getting error when call put, delete methods in dot net core 【发布时间】:2021-11-23 16:57:46 【问题描述】:

当调用 put、delete 方法时我收到此错误 No 'Access-Control-Allow-Origin' 但 get、post 方法没有错误 当在服务器上发布但在我的计算机上我没有任何错误时会发生这种情况 这是启动文件中的代码

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    
        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        
        else
        
            // 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.UseAuthentication();
        app.UseHttpsRedirection();
        app.UseCors("corsPolicy");

        app.UseStaticFiles();
        app.UseMvc();
    

services.AddCors(options =>
        
            options.AddPolicy("corsPolicy", builder =>
            
                builder.AllowAnyMethod().AllowAnyOrigin().AllowAnyHeader().AllowCredentials();
            );
        );

控制器代码

namespace ContinuationProjLast.Controllers

    [Route("api/[controller]")]
    [ApiController]
    [EnableCors("corsPolicy")]

public class marksController : ControllerBase

    private readonly ProductionRefContext _context;

    public marksController(ProductionRefContext context)
    
        _context = context;
    
[HttpPut("id")]

    public async Task<IActionResult> Putmark(int id, mark mark)
    
        if (id != mark.ID)
        
            return BadRequest();
        

        var mm = _context.mark.Where(x => x.devicemark == mark.devicemark && x.devicecategory == mark.devicecategory).FirstOrDefault();
        if (mm == null)
        

            _context.Entry(mark).State = EntityState.Modified;

            try
            
                await _context.SaveChangesAsync();
            
            catch (DbUpdateConcurrencyException)
            
                if (!markExists(id))
                
                    return NotFound();
                
                else
                
                    throw;
                
            
            return NoContent();
        
        else
        
            return BadRequest();

        

    

delete 方法也会发生同样的事情。

我可以得到任何帮助吗?

【问题讨论】:

你能发布更多细节吗?这是在哪里托管(AWS / Azure)或本地的?这只是使用 Kestrel 引擎吗?你能显示允许删除和放置的端点的控制器代码吗? 托管是本地的 【参考方案1】:

iis服务器天生不支持put http动词, 还有一些额外的设置需要做。 我将它们更改为后置动词并在生产中运行良好

【讨论】:

你能告诉我这些设置,我搜索了很多,但我没有找到任何解决方案 请参考这里:***.com/a/6062073/13426729【参考方案2】:

我从 iis 中删除了 WebDAV 发布,转到 控制面板 > 程序和功能 > 打开或关闭 Windows 功能 >IIS > 万维网服务 > 通用 HTTP 功能 > WebDAV 发布 问题已经解决了

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于调用put时出错,删除dot net core中的方法的主要内容,如果未能解决你的问题,请参考以下文章

Omnisharp 无法正确处理 vscode 中的默认 dot net core 3 应用程序

HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)

我在 asp dot net core 中创建控制器但出现错误

将Visual Studio项目转换为Dot Net Core项目 csproj to xproj

如何使用jquery从dot net core mvc中的表中的下拉列表中显示选定的值

使用自包含框架时,dot net core 3.1 的设置 CI 构建配置失败