我有一个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”。我不知道这是否有所不同。
答案 0 :(得分:0)
这里是在一个Web角色下在Azure中并行运行MVC和WebApi的步骤:
打开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;确保两个项目都已检查完毕。还要确保保存并关闭定义文件的文本编辑器的所有实例,然后重建,最后运行。看起来像是某种让我疯狂并最终消失的虫子。
配置主机文件以允许使用模拟器进行本地测试:
127.0.0.1 myapplication.com api.myapplication.com
要使用this .NET cors implementation,请在WebApi项目上运行以下Nuget命令:
Install-Package Thinktecture.IdentityModel
将以下类(从帖子中删除)添加到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();
}
}
从RegisterCors()
Application_Start()
确保WebApi项目中的Web.config具有OPTIONS
的{{1}}动词:
ExtensionlessUrlHandler
制作跨源请求以命中您的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" />
和Viola!
希望能帮助他人