c# - Web API 2 属性路由在 4.5 WebForms 项目中不起作用
问题描述
我已经看到了许多与我的标题相似的其他问题,但似乎没有一个问题是相同的问题或提供我需要的洞察力。
我已将 Web API 控制器添加到现有的旧版 4.5 WebForms 应用程序中,并试图通过对现有代码库的最小更改使其工作。WebApiConfig
因此,当您从头开始创建项目时,我没有典型的静态类和其他默认创建的项目。我现有的代码库是:
全球.asax
protected void Application_Start( Object sender, EventArgs e )
{
GlobalConfiguration.Configure( config =>
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
} );
}
控制器
namespace Modeler.Endpoints
{
public class KatAppEndpoints : ApiController
{
[HttpGet]
[Route( "api/katapp/calculations" )]
public IEnumerable<string> GetCalculations()
{
return new string[] { "value1", "value2" };
}
}
}
Javascript
$(document).ready(function() {
$.getJSON("api/katapp/calculations")
.done(function () { debugger; })
.fail(function (_jqXHR, errorStatus, errorMessage) { debugger; })
.always(function () { debugger; });
});
当被调用时,我点击fail
andalways
结果是:
错误状态:“错误”错误
消息:“未找到”
有什么明显的我失踪了吗?
更新
相反,如果我将控制器更改为...
namespace Modeler.Endpoints
{
public class KatAppsController : ApiController
{
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}
我的 javascript 到:
$.getJSON("api/katapps")
.done(function () { debugger; })
.fail(function (_jqXHR, errorStatus, errorMessage) { debugger; })
.always(function () { debugger; });
事情正常。但是,我有一些端点并且想使用属性,但是如果我能弄清楚如何在 url 中获取另一部分(即上面的 /calculations 部分),我可能会放弃它。
解决方案
不知道为什么,但这条评论指出我在正确的位置: https ://stackoverflow.com/a/38130308/166231
因此,即使我想使用属性路由并且可能与控制器名称不接近,我仍然必须以*Controller
. 重命名KatAppEndpoints
为后KatAppEndpointsController
,一切正常。
推荐阅读
- sql - 使用 Union 连接 SQL 选择语句
- python - 如何冻结 datetime.now 进行单元测试
- kotlin - 变量值不会复制到回调范围之外
- asp.net - 已发布的 Web 应用程序出现 AADSTS50011 错误
- reactjs - React.js 无法访问的子组件
- excel - 无法获取副本以查找最后一行数据
- c# - 我应该返回一个数组而不是单个值吗?
- azure-cosmosdb - CosmosDB 存储 IP 地址范围并按 IP 搜索
- typescript - TypeScript 中的对象接口重新定义
- goland - 如何在 wsl2 goland 中设置 goroot