【问题标题】:How to Implement Separate Projects for ASP.NET MVC 4 and ASP.NET Web API如何为 ASP.NET MVC 4 和 ASP.NET Web API 实现单独的项目
【发布时间】:2012-10-05 14:53:48
【问题描述】:

我正在开发一个大型 ASP.NET MVC/Web API 项目,并希望将控制器分离到它们自己的项目中(如本文 http://msdn.microsoft.com/en-us/magazine/jj190803.aspx 中所述)。不同之处在于我需要分离出 ASP.NET Web API 控制器,而不是“普通”MVC 控制器。

在我的解决方案中,我有两个独立的项目:

  • 一个用于提供 HTML/CSS/JavaScript 的 ASP.NET MVC 4 项目(注意 我没有使用任何标准的 MVC 控制器,这个项目就是全部 对 Web API 进行 jQuery/Ajax 调用的客户端/浏览器端代码)
  • 一个 ASP.NET Web API 项目(这个项目只是 ApiController(s),没有视图、HTML 等,我仍然想要 Web API 项目托管在 IIS 中,而不是自托管)

不管怎样,我看过其他帖子等并没有真正解释我的确切情况,我无法让这个解决方案发挥作用。

如何将我的 Web API 控制器拆分为他们自己的单独项目,并在我的单独 MVC 项目中从我的 HTML/JavaScript 代码中使用它们?还有,我如何在单独的 MVC 项目中从我的 JavaScript/jQuery 代码调用 API 的端点?

谢谢。

【问题讨论】:

    标签: javascript jquery asp.net-mvc asp.net-web-api


    【解决方案1】:

    由于您的 Web Api 和 MVC 位于不同的项目中,并且可能它们将在不同的域中运行,因此由于跨域问题,客户端的通信不太困难。

    虽然您可以尝试 JSONP 或 CORS,但它们不会有太大用处(一种是 hack,另一种在浏览器中没有得到广泛支持),因此您必须在 MVC 项目中创建包装 MVC 控制器,它们会说话通过HttpClient 类到Web Api。

    您的 javascript 将调用您的 MVC 控制器,这样您就可以避免跨域问题。

    【讨论】:

    • 谢谢马克。你说的很有道理。跨域问题可能是我无法让它在我的原型中工作的原因——也就是说,我的 MVC 项目使用localhost:50285,我的 Web API 项目使用localhost:50283,并使用带有 URL 的 jQuery.ajax localhost:50283/api/Values,我不能将 Web API 项目中的 JSON 值导入到 MVC 项目中(它给了我错误:XMLHttpRequest cannot load localhost:50283/api/Values.Origin localhost:50285 is not allowed by Access-Control-Allow-Origin. )。也许我会放弃分离的想法
    • MVC 和 Web API 项目,因为我不确定如何围绕 MVC 控制器编写包装器,然后从中调用 Web API 项目。
    • 查看此帖子johnnycode.com/2012/02/23/…。如果 Web API 仅从 MVC 项目中使用,而不是从任何地方使用,您可以通过这种方式将它们包含在 MVC 项目本身中,您可以避免跨域问题。
    • 再次感谢马克。我不得不将注意力和精力转移到另一个项目上,所以我无法实施您的建议(包括您提供的链接)。看来你的建议可以解决我的问题。谢谢。
    • @Imttag 我在prideparrot.com/blog/archive/2012/10/asp_net_mvc_vs_webapi 就这个主题创建了一个小帖子。你可能会喜欢。
    【解决方案2】:

    您可以将您的 API 控制器分离到另一个项目中,这很好。只需确保您引用了所有必需的程序集。我建议看一下 Nuget 包,以确保您拥有所有这些包。
    对于 api 和 web 分离,我猜只使用正确的路由。检查 MVC 项目的 App_Start 文件夹中的“WebApiConfig.cs”。 API 路由基本上以“API/...”开头,所以它不会弄乱你的 mvc 站点。 所以最后你会得到这样的东西:

     http://localhost/products
     http://localhost/api/products
    

    mvc 站点的第一个处理请求,WebApi 的第二个处理请求。

    【讨论】:

    • 感谢雅罗斯拉夫提供的信息。正如我对 Mark 的评论所表明的那样,我不确定如何让它发挥作用(而且我不知道我是否有足够的时间来弄清楚并实施它)。
    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2019-12-21
    • 2012-08-12
    • 2012-11-14
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多