调用 put 时出错,dot net core 中的 delete 方法
getting error when call put, delete methods in dot net core
当调用 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();
}
}
删除方法也会发生同样的事情。
我能得到什么帮助吗?
Iis 服务器天生不支持 put http 动词,
需要进行额外的设置。
我将它们更改为 post 动词并且在生产中运行良好
我从 iis 中删除了 WebDAV 发布,转到
控制面板 > 程序和功能 > 打开或关闭 windows 功能 >IIS > 万维网服务 > 通用 HTTP 功能 > WebDAV 发布
问题已解决
当调用 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();
}
}
删除方法也会发生同样的事情。
我能得到什么帮助吗?
Iis 服务器天生不支持 put http 动词, 需要进行额外的设置。 我将它们更改为 post 动词并且在生产中运行良好
我从 iis 中删除了 WebDAV 发布,转到
控制面板 > 程序和功能 > 打开或关闭 windows 功能 >IIS > 万维网服务 > 通用 HTTP 功能 > WebDAV 发布
问题已解决