3

私はServiceStackを使用しており、スローされた例外に対して独自のハンドラーを用意しており、美しく機能します。ただし、ServiceStack から返されるデフォルトの 404 エラー ページをオーバーライドする方法がわかりません。現在、ボディは次のようになっています。

Handler for Request not found: 


Request.ApplicationPath: /
Request.CurrentExecutionFilePath: /Test/123
Request.FilePath: /Test/123
Request.HttpMethod: GET
Request.MapPath('~'): C:\Test-Web\src\Web.Service\
Request.Path: /Test/123
Request.PathInfo: 
Request.ResolvedPathInfo: /Test/123
Request.PhysicalPath: C:\Test-Web\src\Web.Service\Test\123
Request.PhysicalApplicationPath: C:\Test-Web\src\Web.Service\
Request.QueryString: 
Request.RawUrl: /Test/123
Request.Url.AbsoluteUri: http://localhost:65079/Test/123
Request.Url.AbsolutePath: /Test/123
Request.Url.Fragment: 
Request.Url.Host: localhost
Request.Url.LocalPath: /Test/123
Request.Url.Port: 65079
Request.Url.Query: 
Request.Url.Scheme: http
Request.Url.Segments: System.String[]
App.IsIntegratedPipeline: False
App.WebHostPhysicalPath: C:\Test-Web\src\Web.Service
App.WebHostRootFileNames: [extensions.cs,global.asax,global.asax.cs,Web.Service.csproj,Web.Service.csproj.user,Web.Service.ncrunchproject,packages.config,servicestack.common.dll,servicestack.common.pdb,servicestack.common.xml,servicestack.interfaces.dll,servicestack.interfaces.pdb,servicestack.interfaces.xml,servicestack.redis.dll,web.config,web.debug.config,web.release.config,bin,dto,exceptions,interfaces,mongo,obj,pipeline,properties,resources,serialization,servicestack,supporting,validators,windsor]
App.DefaultHandler: metadata
App.DebugLastHandlerArgs: GET|/Test/123|C:\Test-Web\src\Web.Service\Test\123

明らかに 404 StatusCode で。

何をオーバーライドまたは変更する必要があるかについてのヘルプまたは指示をいただければ幸いです。私からさらに詳細が必要な場合は、お気軽にお問い合わせください。できるだけ早く返信いたします。

4

1 に答える 1

4

デフォルトの 404 ハンドラーのソース コードは、 https ://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/WebHost.Endpoints/Support/NotFoundHttpHandler.cs にあります。

カスタム 404 ハンドラーは、以下を実装する必要がIServiceStackHttpHandlerありIHttpHandlerます。

public class YourNotFoundHandler : IServiceStackHttpHandler, IHttpHandler
{
    public void ProcessRequest(IHttpRequest request, IHttpResponse response, string operationName)
    { ... }

    public void ProcessRequest(HttpContext context)
    { ... }
}

AppHost.Configure()メソッドでデフォルトの 404 ハンドラーをオーバーライドするには、次のようにします。

SetConfig(new EndpointHostConfig {
    CustomHttpHandlers = { { HttpStatusCode.NotFound, new YourNotFoundHandler() } }
});
于 2012-08-22T10:49:11.897 に答える