【发布时间】:2016-03-23 05:01:15
【问题描述】:
我几乎浏览了我能找到的所有文章,包括 SO 等等。我对Web.config 进行了更改以满足答案,因为它们似乎都指向删除WebDAV 模块和处理程序。
但是,我仍然收到错误消息:
405 方法不允许
请求的资源不支持 http 方法“PUT”。
注意:这最初只是一个 MVC 4 项目。我添加了工件来支持 Web API。似乎我可能错过了什么。
注意:GET 调用在 Angular 中运行良好。
Web API 路由配置
configuration.Routes.MapHttpRoute(
name: "Default API",
routeTemplate: "api/{controller}/{id}",
defaults: new { action = "Get", id = RouteParameter.Optional },
constraints: new { id = @"[\da-z-]{36}" });
configuration.Routes.MapHttpRoute(
name: "Default API with Action",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" });
var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
Web.config
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers accessPolicy="Read, Execute, Script">
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
PUT API 入口
public async Task<IHttpActionResult> Put([FromBody] EditUserViewModel viewModel)
客户端
vm.model.$update(function () {
$state.go(userStates.app);
});
它有可能落入第二条路线配置吗?如果是这样,我如何验证 .NET 尝试使用的路由配置?
【问题讨论】:
-
我会从头开始创建一个 Web.API 应用程序,重新创建问题,看看是否可以重现。看起来您已经完成了正确的 webDAV 配置修改。就像你说的那样,很难判断从 mvc 应用程序转换它是否会导致一些看不见的管道问题。
-
也许我在这里遗漏了一些东西,但这些路线不会都匹配,这意味着第一条路线会被击中吗?是不是第一个匹配的路由只支持GET?
-
@BrendanGreen 我也想知道同样的事情,但似乎并非如此。我没有收到与多个匹配项相关的错误。我是在添加一个新的之后才知道的,这个错误非常明显。
标签: c# angularjs asp.net-mvc asp.net-web-api2