2017-03-09 4 views
0

あなたはURLを解析するためにUriTemplateを使用することができます。C#.NET UriTemplateマッチホワイトリストまたはプールからURLまたはサーバー

私はローカルlocalhost:29001に、私は特定のUriするホストを設定し、Iれるこのコードを持っていますそれは私がこの

0のように使用されて

var absoluteUri = HttpContext.Current.Request.Url.AbsoluteUri; 

そのラインを持っている私の実際のコードでMatch

ある場合にチェック

しかし、本質的にこれは、コードが実行中のC#のように見えるものです。

var host = new Uri("http://localhost:29001"); 
var apiTemplate = new UriTemplate("{api}/{*params}", true); 

var match = apiTemplate.Match(host, new Uri("http://localhost:29001/GetQAByDateTime/date/2-15-2017/time/11")); 
if (match == null) 
    throw new ArgumentException(); 

Console.WriteLine(match.BoundVariables["api"]);  // GetQAByDateTime 
Console.WriteLine(match.BoundVariables["params"]); // date/2-15-2017/time/11 

だから基本的に私はhardcodeにしたくないhost

var host = new Uri("http://localhost:29001"); 

確かに、私はHttpContextからサーバ名を取得することができますが、ポイントは何ですか?

localhost 
localhost:290001 
https://myserver.com 
https://myStagingServer/website 
etc.. 

これらのプールで私はどのように一致させることができますか?

+0

私はlinqpadを使用していました。私は 'var match'が' UriTemplateMatch'であり、どのように複雑なオブジェクトが役に立つのか分かります。しかし、私は 'var host = new Uri(" http:// blahblahliterally ")'を変更することができます。同じ結果が得られますので、 '.Match'が実際にやっていることを理解できません –

+0

後半は申し訳ありません。 – Xiaoy312

答えて

1

あなたはHttpContext.Current.Request.Urlから直接ホストを抽出することができます。

var uri = HttpContext.Current.Request.Url; 
var host = new Uri(uri.Scheme + "://" + x.Authority); 

編集:私は「権限のプロパティとは異なり、このプロパティの値はポート番号が含まれていない」のでUri.Hostが回避されることを追加する必要があります

+0

待って、何x.Authorityですか? –

+0

@JeremyMiller ['Authority'](https://msdn.microsoft.com/en-us/library/system.uri.authority(v = vs.110).aspx)プロパティは通常、サーバーのDNSホスト名です。 IPアドレス。このプロパティは、URIのデフォルトポートと異なる場合、サービスポート番号を含むことがあります。 Authorityコンポーネントに予約文字が含まれている場合、これらは、このプロパティから返された文字列値でエスケープされます。 – Xiaoy312

関連する問題