2016-11-28 12 views
0

ブラウザでサイトルートリクエストに対してハンドラを呼び出そうとしています。つまり、http://my.example.comです。以下のコードでは、/ Testを呼び出すと、ハンドラは期待どおりに動作しますが、それがなければHTTP Error 403.14 - Forbidden(ディレクトリブラウジングは許可されません)と表示されます。サイトルート用の汎用ハンドラ

  • のWindows Server 2012-R2/IISので、拡張子を適切
  • に答えはありませんでした2012 this questionから
  • 同様に動作します
  • ScriptModule-4.0モジュールが継承されて関与なしMVCはありません8.5
  • ジェネリックハンドラが例として挙げられています... Soap Webサービスでもあります

私はさまざまな組み合わせを試みましたnsのスラッシュとアスタリスクをハンドラパスに使用します。

ジェネリックハンドラ:

Public Class Test 
    Implements IHttpHandler 

    Public Sub ProcessRequest(Context As HttpContext) _ 
     Implements IHttpHandler.ProcessRequest 

     With New StringBuilder 
      .AppendLine("<html>") 
      .AppendLine("<head>") 
      .AppendLine("<title>Test</title>") 
      .AppendLine("</head>") 
      .AppendLine("<body>") 
      .AppendLine("<p>Hello World</p>") 
      .AppendLine("</body>") 
      .AppendLine("</html>") 

      Context.Response.Write(.ToString) 
     End With 
    End Sub 
End Class 

...とweb.configファイルで私は、次があります。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <compilation strict="false" explicit="true" debug="true" targetFramework="4.5.2" /> 
     <customErrors mode="Off" /> 
     <authentication mode="Windows" /> 
     <httpRuntime targetFramework="4.5.2" /> 
    </system.web> 

    <system.webServer> 
     <handlers> 
      <add verb="*" name="Test" type="MyApp.Test" path="Test" /> 
     </handlers> 

     <defaultDocument enabled="true"> 
      <files> 
       <clear /> 
       <add value="Test" /> 
      </files> 
     </defaultDocument> 
    </system.webServer> 
</configuration> 

答えて

0

私が思いついた解決策が、私は他のアイデアを開いています。 web.configファイルで

は:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <compilation strict="false" explicit="true" debug="true" targetFramework="4.5.2" /> 
     <customErrors mode="Off" /> 
     <authentication mode="Windows" /> 
     <httpRuntime targetFramework="4.5.2" /> 

     <!-- Required for Web Services via Handlers --> 
     <webServices> 
      <protocols> 
       <add name="HttpGet" /> 
       <add name="HttpPost" /> 
      </protocols> 
     </webServices> 
    </system.web> 

    <system.webServer> 
     <handlers> 
      <add verb="GET,POST" name="Test" type="MyApp.Test" path="Test" /> 
     </handlers> 

     <modules> 
      <add name="AppModule" type="MyApp.AppModule" /> 
     </modules> 

     <defaultDocument enabled="false" /> 
     <directoryBrowse enabled="false" /> 
    </system.webServer> 
</configuration> 

そしてので上記で定義されたハンドラがそれを拾うだろう、私はHttpContext.Current.Request.AppRelativeCurrentExecutionFilePathを評価し、HttpContext.Current.RewritePathを行うAppModuleクラスを追加しました。ウェブアプリがでサイトのルートにある場合、 "〜/" の

  • my.example.com
  • my.example.com/AnyFolder/ MyApplicationを

マッチングは動作しますIISまたはサイト内のアプリとして設定されている:

Public Class AppModule 
    Implements IHttpModule 

    Friend WithEvents WebApp As HttpApplication 

    Public Sub Init(ByVal HttpApplication As HttpApplication) _ 
     Implements IHttpModule.Init 

     WebApp = HttpApplication 
    End Sub 

    Private Sub WebApp_BeginRequest(sender As Object, e As EventArgs) _ 
     Handles WebApp.BeginRequest 

     With HttpContext.Current 
      If .Request.AppRelativeCurrentExecutionFilePath = "~/" Then .RewritePath("~/Test") 
     End With 
    End Sub 

    Public Sub Dispose() _ 
     Implements IHttpModule.Dispose 

     Throw New NotImplementedException() 
    End Sub 
End Class 
関連する問題