이 오류는 매우 일반적이며 모든 솔루션을 시도했지만 그중 어느 것도 작동하지 않았습니다. 제어판에서 WebDAV 게시를 비활성화하고이를 내 웹 구성 파일에 추가했습니다.
<handlers>
<remove name="WebDAV"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
오류가 계속 발생합니다. 이것이 컨트롤러입니다.
static readonly IProductRepository repository = new ProductRepository();
public Product Put(Product p)
{
return repository.Add(p);
}
방법 구현 :
public Product Add(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
item.Id = _nextId++;
products.Add(item);
return item;
}
그리고 여기에서 예외가 발생합니다.
client.BaseAddress = new Uri("http://localhost:5106/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("api/products", product);//405 exception
어떤 제안?
답변
클라이언트에서 게시 중입니다.
await client.PostAsJsonAsync("api/products", product);
PUTing이 아닙니다.
웹 API 메서드는 PUT 요청 만 허용합니다.
그래서:
await client.PutAsJsonAsync("api/products", product);
답변
나는 같은 예외가 있었다. 내 문제는 내가 사용했다는 것입니다.
using System.Web.Mvc; // Wrong namespace for HttpGet attribute !!!!!!!!!
[HttpGet]
public string Blah()
{
return "blah";
}
해야한다
using System.Web.Http; // Correct namespace for HttpGet attribute !!!!!!!!!
[HttpGet]
public string Blah()
{
return "blah";
}
답변
나는 DELETE 메소드 작업을 얻기 위해 많은 것을 시도했고 (웹 API가 허용되지 않는 405 메소드를 얻었습니다) 마침내 [Route ( “api / scan / {id}”)] 를 컨트롤러에 추가했고 정상적으로 작동했습니다. 이 게시물이 도움이되기를 바랍니다.
// DELETE api/Scan/5
[Route("api/scan/{id}")]
[ResponseType(typeof(Scan))]
public IHttpActionResult DeleteScan(int id)
{
Scan scan = db.Scans.Find(id);
if (scan == null)
{
return NotFound();
}
db.Scans.Remove(scan);
db.SaveChanges();
return Ok(scan);
}
답변
내 문제는 WebAPI의 속성 라우팅으로 밝혀졌습니다. 사용자 지정 경로를 만들었고 WebAPI 대신 GET처럼 처리하여 POST임을 발견했습니다.
[Route("")]
[HttpPost] //I added this attribute explicitly, and it worked
public void Post(ProductModel data)
{
...
}
나는 그것이 어리석은 일이어야한다는 것을 알고 있었다 (하루 종일 소비)
답변
Chrome은 종종 OPTIONS
게시물을 작성하기 전에 통화를 시도합니다 . CORS 헤더가 올바른지 확인하기 위해이 작업을 수행합니다. OPTIONS
API 컨트롤러에서 호출을 처리하지 않으면 문제가 될 수 있습니다 .
public void Options() { }
답변
이 오류는 서버가 https에있는 동안 http에 연결하려고 할 때도 발생할 수 있습니다.
내 get-request가 괜찮 았기 때문에 약간 혼란 스러웠고 문제는 사후 요청에만 존재했습니다.
답변
GET 호출에서 405를 얻었고 GET 서버 측 메서드에서 매개 변수 이름을 지정 Get(int formId)
했으며 경로를 변경하거나 이름을 변경해야 한다는 문제가 나타났습니다 Get(int id)
.