这个错误很常见,我尝试了所有的解决方案,但都不起作用。我已经在控制面板中禁用了WebDAV发布,并将以下内容添加到我的web配置文件中:
<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
有什么建议吗?
发布于 2013-03-30 20:58:41
您是来自客户端的POSTing:
await client.PostAsJsonAsync("api/products", product);
不是PUTing。
您的Web API方法只接受PUT请求。
所以:
await client.PutAsJsonAsync("api/products", product);
发布于 2014-02-25 05:20:00
我也有同样的例外。我的问题是我使用了:
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";
}
发布于 2014-08-14 23:39:10
我的问题原来是WebAPI中的属性路由。我创建了一个自定义路由,它将其视为GET,而不是WebAPI发现它是一个POST
[Route("")]
[HttpPost] //I added this attribute explicitly, and it worked
public void Post(ProductModel data)
{
...
}
我知道这一定是愚蠢的(耗费了你一整天的时间)
https://stackoverflow.com/questions/15718741
复制相似问题