【发布时间】:2013-04-04 10:52:24
【问题描述】:
我知道这个网站和其他网站上已经被问过很多次了,但到目前为止我看到的解决方案都没有,所以我在这里。
我在一个 mvc 4 项目中设置了一些 web api 路由。这是一个示例:
routes.MapHttpRoute(name: null, routeTemplate: "Client/Accounts/Save", defaults: new { controller = "AccountsApi", action = "SaveAccount" });
对应如下控制器和动作:
public class AccountsApiController : ApiController
{
[HttpPost]
public object SaveAccount([FromBody] Account input)
{
.....
这在内置 VS Web 服务器中运行时有效,并且在 IIS7.5 的本地(Windows 7)安装上运行,没有做任何花哨的事情,但在 Server 2008 R2 上的 IIS7 中运行时会出现 404。
信息:
- MVC4 已安装在服务器上
- 应用程序位于具有集成模式和框架 v4 的应用程序池中
我尝试过的:
- 玩了足够多的路由,知道这不是路由问题
- 设置
<modules runAllManagedModulesForAllRequests="true" />(无论如何都是默认设置) - 看了this
- 完成 aspnet_regiis -ir 舞蹈
- 自定义错误关闭,编译 debug=false - 如果这些有什么不同的话。
- 只有自定义 api 路由,没有包罗万象。
- IIS 日志只显示 404,正如您所料;系统事件日志中没有任何内容
该 api 仅使用 GET 和 POST 请求,这两个请求都不起作用。可能还值得一提的是,这些调用都是通过 ajax 进行的。
system.web, system.webServer,runtime 配置中的部分:
<system.web>
<compilation debug="false" targetFramework="4.0" />
<customErrors mode="Off" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
非常感谢任何建议。谢谢。
更新
我重新实现了我的一个控制器,只使用 HttpResponseMessage 和 HttpRequestMessage
[HttpGet]
public HttpResponseMessage GetAccount(HttpRequestMessage message)
{
message.CreateResponse(....
这在本地运行时再次按预期工作(在 Win7 上安装 cassini 和完整的 IIS 本地安装),但在推送到服务器时失败。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 iis-7 asp.net-web-api