简单Web API控制器返回404

时间:2015-09-02 18:08:24

标签: asp.net .net

我刚在项目中创建了一个基本的Web Controller。我点击调试并尝试浏览到/ api / duedate,我得到了404.我是控制器的新手,并且一直在查看我能找到的每个教程。他们都没有说我需要添加更多东西才能让它发挥作用。

 Imports System.Net
Imports System.Web.Http

Public Class DueDateController
    Inherits ApiController

    ' GET api/duedate
    Public Function GetValues() As IEnumerable(Of String)
        Return New String() {"value1", "value2"}
    End Function

    ' GET api/duedate/5
    Public Function GetValue(ByVal id As Integer) As String
        Return "value"
    End Function

    ' POST api/duedate
    Public Sub PostValue(<FromBody()> ByVal value As String)

    End Sub

    ' PUT api/duedate/5
    Public Sub PutValue(ByVal id As Integer, <FromBody()> ByVal value As String)

    End Sub

    ' DELETE api/duedate/5
    Public Sub DeleteValue(ByVal id As Integer)

    End Sub
End Class

我的web.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webPages:Version" value="2.0"/>
  </appSettings>
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true" />
  <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>

</configuration>

2 个答案:

答案 0 :(得分:1)

我相信你需要添加一条路线。

Routing in VB

如果您阅读此主题中的最后一条评论,它应该会向您展示如何向您的应用添加路由。

答案 1 :(得分:0)

帮助其他人,并简化阅读这篇长篇文章。您需要创建和修改global.asax文件以包含此内容:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RouteTable.Routes.MapHttpRoute("WebApi1",
                                  "api/{controller}/{id}",
                                  defaults:=New With {.id = System.Web.Http.RouteParameter.Optional})
End Sub