Web API 404错误

时间:2017-04-08 00:18:40

标签: asp.net-web-api

我在调用web api方法时遇到404错误...

下面是我的代码

Web API Controller:

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class HomeController : ApiController
{
    private  HomeDataProvider homeDataProvider = new HomeDataProvider();

    // GET api/<controller>
    [AllowAnonymous]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

[AllowAnonymous]
    [HttpPost]
    //[Authorization]
    public List<User> Test_API(HomeSearch searchParam)
    {
        List<User> Test_User = null;
        try
        {
            Test_User = homeDataProvider.Test_DataProvider(searchParam);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {

        }
        return Test_User;
    }

Web API配置

        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "API Default",
            routeTemplate: "webapi/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Web API Web.config

      <appSettings></appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
        <roleManager enabled="false" />
    <!--<roleManager defaultProvider="AspNetWindowsTokenRoleProvider" 
enabled="true" />-->
  </system.web>
  <system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true">
</modules>
  <handlers>
   </handlers>

      </system.webServer>

I am using windows 10, vs 2015, iis 10
url i am calling
http://localhost/webapi/home/get
Error: 404, static handler error

我搜索并尝试了stackoverflow和其他来源的所有选项,但都是徒劳的

3 个答案:

答案 0 :(得分:2)

我想出答案

实际上: 在Web API设置中: 我选择了:本地iis,localhost / webapi ...创建虚拟目录 所以我的路线是 本地主机/的WebAPI /的WebAPI /家/让 感谢Alex为您发布的帮助和可能的解决方案......

答案 1 :(得分:0)

我认为您需要将{action}添加到您的路由模板中,或者尝试调用端点而不是像这样访问URL:

http://localhost/webapi/home

答案 2 :(得分:0)

在IIS(Windows 10)和本地主机上发布WebApi

这些只是我的个人经历,不是完整的指南,但对我有用。

在Visual Studio 2017/2019中发布

  • 配置文件发布方法:文件系统
  • 目标位置指向您要发布到的目录,即“ C:\ Develop \ MyWebApi \ published”

注意:如果WebApi可在Visual Studio调试器中使用,则并不意味着它也可在IE中使用。因此,您必须进行其他设置,请参见下文。

IIS本身必须配置为通常可与WebApis一起使用:

  • 控制面板/程序/程序和功能/打开Windows功能 或关闭/ Internet信息服务/万维网服务/应用程序开发功能/选择除CGI之外的所有内容。

配置IIS应用程序池(计算机管理/服务和应用程序/ Internet信息服务(IIS)管理器/扩展计算机/应用程序池/添加应用程序池...)

  • 名称:可以自由选择,即“ WebApiLocalhost”
  • .Net CLR版本: 4.0(不用担心,您的WebApi可以具有更高的级别)
  • 身份:“ LocalSystem”

    通常建议:“ ApplicationPoolIdentity”(默认)。然后,该用户必须在WebApi的发布目录上具有文件系统权限(读取和执行)  (在我们的示例中为“ C:\ Develop \ MyWebApi \ published”),并且在所有目录上,WebApi都可能在以后寻址。 “ ApplicationPoolIdentity”的可能问题是它的伪用户“ IIS AppPool \ <池名称>”仅适用于本地计算机,而不适用于域。将权限分配给外部服务器的文件夹时,可能会导致问题。

    注意:如果您仅需要本地文件夹的权限,并且想使用伪用户“ IIS AppPool \ <池名称>”,并且您的计算机位于域中,则默认情况下将找不到该用户。您必须先通过“位置...”按钮选择本地计算机。

    对于标识“ LocalSystem”,系统用户“ IUSR”必须获得相应的文件系统权限。

    第三个选择是使用密码将身份硬连线到本地用户。但这有一个缺点,就是必须总是在此处输入密码更改,而这常常被遗忘。

将其他选项保留为默认值。

配置网站(我仅尝试使用HTTP)

  • 绑定:HTTP,选择一个空闲端口,即8094,没有IP地址,没有主机 名称
  • 应用程序池:您的应用程序池,在我们的示例中:WebApiLocalhost
  • 物理路径:指向WebApi的“发布”目录,此处为“ ... MyWebApi /已发布”

注意:

    IIS-Web应用程序中
  • %LOCALAPPDATA%在ApplicationPoolIdentity下 “ LocalSystem”指向 “ C:\ Windows \ system32 \ config \ systemprofile \ AppData \ Local \”而不是 Vc:\ Users \\ AppData \ Local \“。这意味着:如果您还有其他 应用程序文件,例如config.xmls或%LOCALAPPDATA%以下的类似文件, 确保它们也存在于IUSR的%LOCALAPPDATA%中。

注意:

  • 系统用户“ IUSR”必须具有对以下用户的读取和执行权限: WebApi的发布文件夹(在示例中 “ C:\ Develop \ MyWebApi \ published”)以及所有使用的文件夹 在WebApi应用程序中。因此可能在: “ c:\ Windows \ system32 \ config \ systemprofile \ AppData \ Local ...”和 可能在外部目录上。

注意:

  • 在特定于客户端的更改之后,尤其是在Javascript中 环境,在进行新测试之前,必须删除浏览器缓存 (Chrome浏览器通过Ctrl-Shift-Del键。)

注意:

  • “ c:\ Users \\ AppData \ Local \ Microsoft \ WebsiteCache \”可能包含 应用程序文件的版本过旧-我搜索了几个小时。 解决方案:删除... \ WebsiteCache \下的特定于应用程序的文件夹 定期。