将Web API添加到现有ASP.NET Web窗体应用程序时出现问题

时间:2014-01-30 15:55:47

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

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

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

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

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

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

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

 http://localhost:49919/api/Values

现在我想这是因为我试图从我的网站访问API,这是另一个项目。但即使在网上寻找解决方案的时间后,我也找不到任何可以解决我问题的方法。我找到了一些有同样问题的人,但是他们的解决方案并不适用于我。

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

  • 在网站项目中添加了对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/

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

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

当然,它就像那样简单,但我不知道还需要做什么。

1 个答案:

答案 0 :(得分:1)

我用于解决问题的解决方案:

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

网站http://localhost:49919/

API http://localhost:49919/api/

(/ api因为他们不能拥有相同的网址)

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