c# - Web api 路由在 asp.net MVC 5 中失败
问题描述
我有一个带有大量控制器和 Web api 的 asp.net MVC 5 项目。问题是当我想访问其中一种 api 方法时,我得到No HTTP resource was found that match the request URI ...错误。
我在类似的帖子中尝试了所有解决方案,但我并不幸运。这是我的 RouteConfig 文件:
public static void Register(HttpConfiguration config)
{
// Routing configs
config.MapHttpAttributeRoutes();
// Files api routs
config.Routes.MapHttpRoute(
name: "filesApi_1",
routeTemplate: "api/{controller}/{action}/{file}",
defaults: new object[]
{
new { controller = "Files", action ="SaveAttachment"}
}
);
config.Routes.MapHttpRoute(
name: "filesApi_2",
routeTemplate: "api/{controller}/{action}/{fileName}",
defaults:
new { controller = "Files", action = "DeleteAttachment" }
);
}
当我转到 htt://localhost:xxxx/api/Files/DeleteAttachment/file_name 时,我收到错误消息。
我的 Global.asax.cs 是:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Mapper.Initialize(c=> c.AddProfile<MappingProfile>());
}
控制器是:
public class FilesController : ApiController
{
public void SaveAttachment(HttpPostedFileBase file){}
public void DeleteAttachment(string fileName){}
}
很奇怪,如果我为 web api 操作添加属性路由,它们会按预期工作。例如:
[Route("api/Files/DeleteAttachment/{fileName}")]
public void DeleteAttachment(string fileName){}
我不想为每个动作都写 Route,因为我有很多动作,这会使代码变得脆弱。如何修复路由表中的路由?谢谢。
解决方案
您必须检查文件名。如果文件 url 即将到来或文件名中的值包含“/”,它将拆分路由并创建一个新的 url
htt://localhost:xxxx/api/Files/DeleteAttachment/file_name_before_slash/file_name_after_slash
它与您的 URL 不匹配。
检查代码文件名部分的值。
-------------------- 编辑 1 ----------------- --------
问题可能出在文件名“file.jpg”中。文件名中的点 (.) 导致问题参考此链接,更多类似问题可用。还要检查这个。
尝试
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
推荐阅读
- java - 有没有更好的迭代方法来找到可整除的数?
- c# - Azure Build 代理找不到类库参考
- python-3.x - AttributeError:“NoneType”对象在从表单插入时没有属性
- angular - 无法在与 Angular 中的组件相同的文件夹中显示静态图像
- c# - 删除所有连接的子实体
- javascript - Camera Roll adding borderColor
- r - force the evaluation of .SD in data.table
- ember.js - Ember 服务:每个端口都在使用中
- r - Is parallel processing a solution for RAM shortage in R due to a large dataset?
- python - 如何使用模块 Re 在 python 中调整“时间”