【问题标题】:Web API 2 Attribute Routing Not Working in 4.5 WebForms ProjectWeb API 2 属性路由在 4.5 WebForms 项目中不起作用
【发布时间】:2021-08-27 17:03:15
【问题描述】:

我看到了许多与我的标题相似的其他问题,但似乎没有一个问题是相同的问题或提供我需要的见解。

我已将 Web API 控制器添加到现有的旧版 4.5 WebForms 应用程序中,并试图通过对现有代码库的最小更改使其工作。因此,当您从头开始创建项目时,我没有典型的静态 WebApiConfig 类和其他默认创建的项目。我现有的代码库是:

Global.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; });
});

调用时,我点击了failalways,结果是:

错误状态:“错误”
错误消息:“未找到”

我遗漏了什么明显的东西?

更新

如果我将控制器更改为...

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 部分),我可能会放弃它。

【问题讨论】:

  • 您使用的是 HTTP 还是 HTTPS?如果服务器需要 HTTPS,而您发送的 HTTP 可能会导致此问题。现在大多数服务器都需要 HTTPS。在 4.5 中,一些仍然使用 HTTP。
  • 本地开发,所以是的,在开发/测试时使用 HTTP。有没有办法允许 HTTP?
  • 如果你调试,你会打GetCalculations()函数吗?
  • 不,我从来没有进入过GetCalculations()。请参阅我对有关更多信息的问题的更新。
  • 服务器有要求 https 之类的设置。请参阅:docs.microsoft.com/en-us/aspnet/web-api/overview/security/…

标签: c# asp.net webforms asp.net-web-api2


【解决方案1】:

不知道为什么,但这条评论指出了我的正确位置:https://stackoverflow.com/a/38130308/166231

所以即使我想使用属性路由并且可能与控制器名称不接近,我仍然必须以*Controller 结束类名。将KatAppEndpoints 重命名为KatAppEndpointsController 后,一切正常。

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2017-09-19
    • 1970-01-01
    • 2015-03-19
    • 2013-06-23
    • 1970-01-01
    • 2014-04-23
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多