如何解决DELETE return ERROR 405(Method Not allowed) 我正在使用 React 和 ASP.Net Core
我正在尝试使用行上的 id 删除一行。当我在本地服务器上执行它时,它工作正常,但在 plesk 服务器上出现错误。 请求 CREATE 和 GET 工作正常,但 DELETE 和 UPDATE 不起作用。
函数删除:
onDeleteConfirmation(e) {
e.preventDefault();
const { id } = this.props.match.params;
axios.delete("api/Trips/DeleteTrip/" + id).then(result => {
this.props.history.push('/Trips')
});
}
功能更新:
onUpdateConfirmation(e) {
e.preventDefault();
const { id } = this.props.match.params;
let tripObject = {
name: this.state.name,description: this.state.description,dateStarted: this.state.dateStarted,dateComplated: this.state.dateComplated
}
axios.put("api/Trips/UpdateTrip/"+id,tripObject).then(result => {
this.props.history.push('/Trips')
});
}
控制器服务:
[HttpDelete("DeleteTrip/{id}")]
public IActionResult DeleteTrip(int id)
{
_service.DeleteTrip(id);
return Ok();
}
. 我在 Visual stdio 中使用 ASP.Net Core 3 和 React。 我尝试在在线服务器 Plesk 上执行时出现问题。
这是完整的控制器:
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Trips.Data.Models;
using Trips.Data.Services;
namespace Trips.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TripsController : ControllerBase
{
public ITripService _service { get; set; }
public TripsController(ITripService service)
{
_service = service;
}
[EnableCors("AnotherPolicy")]
[HttpGet("GetTrips")]
public IActionResult GetTrips()
{
try
{
//throw new Exception();
var allTrips = _service.GetAllTrips();
return Ok(allTrips);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
}
[EnableCors("AnotherPolicy")]
[HttpGet("SingleTrip/{id}")]
public IActionResult GetTripById(int id)
{
var trip = _service.GetTripById(id);
return Ok(trip);
}
[EnableCors("AnotherPolicy")]
[HttpPost("AddTrip")]
public IActionResult AddTrip([FromBody] Trip trip)
{
if (trip != null)
{
_service.AddTrip(trip);
}
return Ok();
}
[EnableCors("AnotherPolicy")]
[HttpPut("UpdateTrip/{id}")]
public IActionResult UpdateTrip(int id,[FromBody] Trip trip)
{
_service.UpdateTrip(id,trip);
return Ok(trip);
}
[EnableCors("AnotherPolicy")]
[HttpDelete("DeleteTrip/{id}")]
public IActionResult DeleteTrip(int id)
{
_service.DeleteTrip(id);
return Ok();
}
}
}
.
StartUp.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// In production,the React files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
//
services.AddTransient<ITripService,TripService>();
services.AddCors(options =>
{
options.AddPolicy("AnotherPolicy",builder =>
{
builder.WithOrigins(
"http://hirkansolar.ir/","http://react.hirkansolar.ir/"
)
.AllowAnyHeader()
.WithMethods("PUT","DELETE","GET","POST");
});
});
}
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseRouting();
// ----
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",pattern: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
}
}
解决方法
您需要在响应中添加 CORS 标头以启用跨源的 DELETE 请求。
https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-5.0
在您的 def trainIters(self,n_iters,model_file_path=None):
iter,running_avg_loss = self.setup_train(model_file_path)
start = time.time()
while iter < n_iters:
batch = self.batcher.next_batch()
loss = self.train_one_batch(batch)
running_avg_loss = calc_running_avg_loss(loss,running_avg_loss,self.summary_writer,iter)
iter += 1
if iter % 100 == 0:
self.summary_writer.flush()
print_interval = 2
if iter % print_interval == 0:
print('steps %d,seconds for %d batch: %.2f,loss: %f' % (iter,print_interval,time.time() - start,loss))
start = time.time()
if iter % 5000 == 0:
self.save_model(running_avg_loss,iter)
中:
Startup.cs
进行此更改后,响应应包含 public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options => { // <--- define a policy
options.AddDefaultPolicy(builder => {
builder.WithOrigins(
"http://example.com","http://www.contoso.com"
)
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// ...
}
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
// ...
app.UseRouting();
app.UseCors(); // <--- enable the middleware
// ...
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
标头。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。