我开发了一个简单的WebAPI 2控制器,只有一个Controller和一些简单的GET方法。我为此创建了一个Visual Studio 2015 Emtpy ASP.Net Web应用程序,并为其添加了一个WebAPI 2控制器。
我已将其发布到安装了IIS 8.5和ASP.Net 4.0的Windows 2012 R2计算机上。它有最新的更新等。
当我从浏览器调用Method时出现错误404 - 0x80070002通知:MapRequestHandler
您可以在此处下载我的解决方案:VS2015 WebAPI2 Solution
这是错误消息:
这是我的网络应用程序:
这些是处理程序:
这是WebApplication配置:
这是应用程序池配置:
这些是ISAPI过滤器:
有没有人知道为什么它不起作用的可能原因?
这是我的控制者:
using System.Collections.Generic;
using System.Web.Http;
namespace WebApi2Routes1.Controllers
{
// [Controller wird api/Default in diesem Fall genommen, also Controller Name ohne 'Controller'
[RoutePrefix("api/[controller]")]
public class BuecherController : ApiController
{
// GET: api/buecher/default
// [HttpGet]
[Route("")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/buecher/show
[Route("show")]
public string Show()
{
return "Show";
}
[Route("value/{id:int}")]
public string GetValue(int id)
{
return "value" + id.ToString();
}
}
}
这是我的web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
Weitere Informationen zum Konfigurieren Ihrer ASP.NET-Anwendung finden Sie unter
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<appSettings></appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/>
</system.web>
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"
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-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
</configuration>
我这是抛出错误的网址:
http://localhost:8080/api/buecher
和
http://localhost:8080/api/buecher/show
更新1:
我也有一个global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Routing;
namespace WebApi2Routes1
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
}
和WebApiConfig.cs
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;
namespace WebApi2Routes1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web-API-Konfiguration und -Dienste
// Web-API-Routen
config.MapHttpAttributeRoutes();
// var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
// jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
}
答案 0 :(得分:1)
由我自己解决。那里有两个问题:
[RoutePrefix("api/[controller]")]
[控制器]作为令牌不起作用!你必须用静态字符串替换它,比如&#34; books&#34;或其他任何东西。
第二个问题是方法需要明确的HHTPGET或HTTPPOST等。这不起作用
[Route("show")]
public string Show()
{
return "Show";
}
这有效
[Route("show")]
[HttpGet]
public string show()
{
return "Show";
}
只有当方法本身被称为获取()或发布()或...时,才需要 [HttpGet]
将RoutePrefix中的[controller]标记替换为静态值并将[HTTPGET]添加到它工作的方法之后!