Web API报错:未找到Upload控制器匹配的UploadFile方法
解决Web API 404:未找到控制器‘Upload’上匹配名称‘uploadfile’的操作
我来帮你排查这个404问题,从你的代码来看,主要有几个可能的原因,咱们一步步解决:
1. 启用特性路由(最可能的根因)
你在UploadFile方法上使用了特性路由([Route]属性),但在Global.asax的Application_Start里没有启用特性路由支持。Web API 2及以上版本需要显式开启特性路由,否则控制器上的[Route]属性不会生效。
修改你的Global.asax代码,先启用特性路由再配置约定路由:
<%@ Import Namespace="System.Web.Routing" %> <%@ Import Namespace="System.Web.Http" %> <%@ Application Language="VB" %> <script runat="server"> Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' 先启用特性路由支持 GlobalConfiguration.Configuration.MapHttpAttributeRoutes() ' 再配置默认约定路由 RouteTable.Routes.MapHttpRoute( name:="DefaultApi", routeTemplate:="api/{controller}/{action}/{id}", defaults:=New With {.id = System.Web.Http.RouteParameter.Optional} ) End Sub </script>
2. 确保请求使用POST方法
你的UploadFile方法标记了[HttpPost],这意味着它只接受POST请求。如果你直接在浏览器地址栏输入URL访问(这是GET请求),Web API会找不到匹配的GET操作,从而返回404。
你需要用POST请求工具(比如Postman、curl)测试,或者在前端通过AJAX发送POST请求到目标URL。
3. 验证控制器与方法的合规性
- 你的控制器类名
UploadController以Controller结尾,符合Web API的命名规则,没问题。 UploadFile方法是Public修饰的,满足Web API对操作方法的访问权限要求。
4. 确认路由优先级
当特性路由和约定路由共存时,特性路由的优先级更高。启用特性路由后,你配置的[Route("api/Upload/UploadFile")]会直接匹配访问URL,无需依赖约定路由的规则。
修改完成后重启项目,用POST请求测试http://localhost:[portno]/api/Upload/UploadFile,应该就能正常访问了。
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

