在Azure中运行WebApi和MVC项目

时间:2013-03-27 02:03:26

标签: asp.net-mvc-4 azure asp.net-web-api

我有一个MVC项目的解决方案,还有一个单独的Web Api项目。我一直致力于MVC部分,并将其作为云服务项目中的Web角色托管。

现在我需要建立在Web Api上。在azure模拟器中运行解决方案我无法点击我的Web Api控制器,我得到了404 Not Found。

在解决方案中创建WebApi项目后,我需要采取哪些步骤才能使我的MVC项目与它一起使用jQuery ajax调用(来自MVC项目)来命中Api控制器?

注意:将使用Api的应用程序部分位于子域中(例如“consumeapp.myapplication.com/api/Values”。我不知道这是否有所不同。

1 个答案:

答案 0 :(得分:0)

这里是在一个Web角色下在Azure中并行运行MVC和WebApi的步骤:

  1. 在Cloud Service项目中仅将MVC项目添加为Web角色。
  2. 打开ServiceDefinition.csdef配置如下:

    <Sites>
       <Site name="Web" physicalDirectory="..\..\..\Application.Web">
          <Bindings>
             <Binding name="Endpoint1" endpointName="Endpoint1" />
          </Bindings>
       </Site>
       <Site name="Web.Api" physicalDirectory="..\..\..\Application.Web.Api">
          <Bindings>
             <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="api.myapplication.com"/>
          </Bindings>
       </Site>      
    </Sites>
    

    注意: 物理目录与部署到CloudProject \ bin \ release的定义文件相关,因此您需要回溯跟踪3个节点才能进入解决方案文件夹。此外,我在尝试运行项目时遇到了一些麻烦,它会自动将physicalDirectory切换回坏路径。为了解决这个问题,我右键点击了云项目&gt; 项目依赖关系&gt;确保两个项目都已检查完毕。还要确保保存并关闭定义文件的文本编辑器的所有实例,然后重建,最后运行。看起来像是某种让我疯狂并最终消失的虫子。

  3. 配置主机文件以允许使用模拟器进行本地测试:

    127.0.0.1 myapplication.com api.myapplication.com

  4. 要使用this .NET cors implementation,请在WebApi项目上运行以下Nuget命令:

    Install-Package Thinktecture.IdentityModel

  5. 将以下类(从帖子中删除)添加到WebApi项目中:

    public static class CorsConfig
    {
        public static void RegisterCors(HttpConfiguration httpConfiguration)
        {
            WebApiCorsConfiguration corsConfig = new WebApiCorsConfiguration();
            corsConfig.RegisterGlobal(httpConfiguration);
    
            corsConfig
                .ForResources("Values") //Controller nae
                .ForOrigins("http://myapplication.com", "myapplication.com:81")
                .AllowAll();
        }
    }
    
  6. RegisterCors()

  7. 致电Application_Start()
  8. 确保WebApi项目中的Web.config具有OPTIONS的{​​{1}}动词:

    ExtensionlessUrlHandler
  9. 制作跨源请求以命中您的api控制器:

      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    
  10. 和Viola!

    希望能帮助他人