Asp.net mvc 4 在Azure中与MVC项目一起运行WebApi

Asp.net mvc 4 在Azure中与MVC项目一起运行WebApi,asp.net-mvc-4,azure,asp.net-web-api,Asp.net Mvc 4,Azure,Asp.net Web Api,我有一个带有MVC项目的解决方案,还有一个单独的WebAPI项目。我一直在从事MVC部分的工作,并在一个云服务项目中将其作为web角色托管 现在,我需要构建Web Api。在azure emulator中按原样运行解决方案我无法点击我的Web Api控制器,我得到一个404未找到 在解决方案中创建WebApi项目后,我需要采取哪些步骤才能使我的MVC项目与它一起使用jQuery ajax调用(来自MVC项目)访问Api控制器 注意:将使用Api的应用程序部分位于子域(例如“consuminiga

我有一个带有MVC项目的解决方案,还有一个单独的WebAPI项目。我一直在从事MVC部分的工作,并在一个云服务项目中将其作为web角色托管

现在,我需要构建Web Api。在azure emulator中按原样运行解决方案我无法点击我的Web Api控制器,我得到一个404未找到

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


注意:将使用Api的应用程序部分位于子域(例如“consuminigapp.myapplication.com/Api/Values”)中。我不知道这是否有任何区别。

确定以下是在Azure中以单个web角色并排运行MVC和WebApi的步骤:

  • 仅将MVC项目添加为云服务项目中的Web角色
  • 打开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>
    
  • Application\u Start()

  • 确保WebApi项目中的Web.config具有
    选项
    谓词,用于
    ExtensionlessUrlHandler

      <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" />
    
  • 还有维奥拉


    希望这对其他人有所帮助

    这是一篇很好的文章,与我所做的非常相似。你缺少的一点是,你真的应该构建/发布辅助站点,而不是依赖默认的文件副本。这将为你提供一个合适的包(只提供你需要的文件),并启用配置转换(关键)。请参阅以获取参考。是的,如果没有这些额外的配置,您是对的。我可能会在部署过程中遇到问题。感谢您使用该链接返回。如果您打算从myapplication.com调用api.myapplication.com,则需要使用CORS。这些域不相同。如果调用的是myapplication.com/api,则您不需要CORS。否。您的路线图决定了您的应用程序的公开方式。正确,使用默认路线,您的API将通过/API公开,您不需要CORS。如果您希望将API公开为API。*,您将需要CORS。安全/身份验证要求可能会推动该决定。您的问题与我想我的回答和其他人在这个问题上的回答应该对你有所帮助。
      <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" />
    
    $.ajax({ url: "http://api.myapplication.com/api/Values", ... })