2017-05-11 16 views
1

私はOwin.Testingをtest envとして使用しています。私のコントローラでは、私は発信者からリモートIPアドレスを取得する必要があります。結果のプロパティとしてOwin.Testingを使用してリモートIPを取得

//in my controller method 
var ip = GetIp(Request); 

Utilの

private string GetIp(HttpRequestMessage request) 
     { 
      return request.Properties.ContainsKey("MS_HttpContext") 
         ? (request.Properties["MS_HttpContext"] as HttpContextWrapper)?.Request?.UserHostAddress 
         : request.GetOwinContext()?.Request?.RemoteIpAddress; 
     } 

OwinContextのMS_HttpContextとRemoteIpAddressがnullが含まれていません。

IPを取得するオプションはありますか?

答えて

0

解決策が見つかりました。これにはテストミドルウェアを使用します。あなたのテストプロジェクト内のすべて:

public class IpMiddleware : OwinMiddleware 
{ 
    private readonly IpOptions _options; 

    public IpMiddleware(OwinMiddleware next, IpOptions options) : base(next) 
    { 
     this._options = options; 
     this.Next = next; 
    } 

    public override async Task Invoke(IOwinContext context) 
    { 
     context.Request.RemoteIpAddress = _options.RemoteIp; 
     await this.Next.Invoke(context); 
    } 
} 

ハンドラ:

public sealed class IpOptions 
{ 
    public string RemoteIp { get; set; } 
} 

public static class IpMiddlewareHandler 
{ 
    public static IAppBuilder UseIpMiddleware(this IAppBuilder app, IpOptions options) 
    { 
     app.Use<IpMiddleware>(options); 
     return app; 
    } 
} 

テスト起動:

public class TestStartup : Startup 
{ 
    public new void Configuration(IAppBuilder app) 
    { 
     app.UseIpMiddleware(new IpOptions {RemoteIp = "127.0.0.1"}); 
     base.Configuration(app);   
    } 
} 

そしててTestStartupを介してテストサーバーを作成します。

TestServer = TestServer.Create<TestStartup>(); 
関連する問題