【问题标题】:Problems when adding Web API to an existing ASP.NET Web Forms Application将 Web API 添加到现有 ASP.NET Web 窗体应用程序时出现问题
【发布时间】:2014-02-23 00:52:07
【问题描述】:

首先是一些背景信息。我有一个在 VS 2012 Express 中创建的 Web 表单应用程序形式的工作网站。然后我尝试添加一个 Web API,方法是添加一个 ASP.NET MVC 4 Web 应用程序项目并选择 Web API。

所以整个项目现在有三个不同的项目。

  • DAL(数据访问层)
  • Web 表单应用程序
  • 网络 API

(我已经阅读了将 API 添加到现有项目的教程,但需要在不同的项目中使用 Web API。)

为了简单起见,我只使用从一开始就包含的控制器,直到我解决这个问题。

我的问题是当我尝试运行时遇到 404 Not Found 错误,例如:

 http://localhost:49919/api/Values

现在我猜这是因为我试图从我的站点访问 API,这是另一个项目。但即使在网上寻找几个小时的解决方案后,我也找不到任何可以解决我问题的东西。我发现有些人有同样的问题,但他们的解决方案对我不起作用。

到目前为止我尝试过的事情是:

  • 在 Site 项目中添加了对 API 的引用。

  • 将此代码添加到 API Web.Config。如果理解正确,应该允许项目之间的访问。

      <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear/>
         <add name="Access-Control-Allow-Origin" value="*" />
         <add name="Access-Control-Allow-Headers" value="Content-Type" />
         <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders  > 
    </httpProtocol  > 
    </system.webServer  > 
    

我在 WebApiConfig 中的路由如下所示:

 public static void Register(HttpConfiguration config)
        {
                config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

API 中的 Global.asax 如下所示:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

我尝试用一​​个 Web API 制作一个全新的项目,它无需任何编辑即可工作。

这是我第一次使用 Web API,所以我很感激我能得到的所有帮助。

编辑:我想我会添加 API 的目的。我将使用它从 DAL 获取最新消息,并在网站上使用 jQuery/AJAX 显示它。

Edit2:将 API 上的 IIS 端口更改为与我的网站相同的端口。

网站http://localhost:49919/

APIhttp://localhost:49919/api/(/api because they can't have the same url)

链接现在看起来像这样 49919/api/api/values,但可以修复。

当然就是这么简单,但我不知道需要这样做。

【问题讨论】:

  • 我已经尝试了“”解决方案,但它没有做任何事情。我不认为他的情况和我的一样。
  • 我相信 webapi 的默认路由模板不包含{action}。查阅文档。
  • 你说得对,我一开始就改了。其中一个包含的 URL 将如下所示,localhost:49919/api/Values/GET/5。 {action} 用于声明例如 GET。不幸的是,将它改回来并没有做任何事情,因为即使尝试访问 api/Values 也会出现我的错误。
  • @LuisGouveia 是的,就像我在编辑中写的那样,我在 api 项目的设置中更改了 IIS 端口,因此它与主项目相同。这为我解决了它。抱歉这么久才回复,之前没看到你的帖子。祝你好运!

标签: asp.net api webforms asp.net-web-api


【解决方案1】:

解决问题的方法:

我将 API 项目上的 IIS 端口更改为与我的网站项目相同的端口。

网站http://localhost:49919/

APIhttp://localhost:49919/api/

( /api 因为它们不能有相同的 url )

链接现在看起来像这样 49919/api/api/values,但可以修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 2017-08-28
    • 2014-04-19
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多