web-dev-qa-db-ja.com

Web APIコントローラーでベースURLを取得する方法は?

Url.Link()を使用して特定のルートのURLを取得できることは知っていますが、Web APIコントローラーでWeb APIベースURLを取得するにはどうすればよいですか?

64

VirtualPathRootHttpRequestContextプロパティを使用できます(request.GetRequestContext().VirtualPathRoot

42
Kiran Challa

URLへのリクエストのアクションメソッドで " http:// localhost:85458/api/ctrl / "

var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ;

これはあなたを取得します http:// localhost:85458

72
mLar
Url.Content("~/")

私のために働いた!

32
Athadu

これは私が使用するものです:

Uri baseUri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, String.Empty));

次に、別の相対パスと組み合わせた場合、次を使用します。

string resourceRelative = "~/images/myImage.jpg";
Uri resourceFullPath = new Uri(baseUri, VirtualPathUtility.ToAbsolute(resourceRelative));
13
David Martin

このサービスをコントローラーに注入します。

 public class LinkFactory : ILinkFactory
 {
    private readonly HttpRequestMessage _requestMessage;
    private readonly string _virtualPathRoot;


    public LinkFactory(HttpRequestMessage requestMessage)
    {
        _requestMessage = requestMessage;
        var configuration = _requestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] as HttpConfiguration;
        _virtualPathRoot = configuration.VirtualPathRoot;
        if (!_virtualPathRoot.EndsWith("/"))
        {
            _virtualPathRoot += "/";
        }
    }

    public Uri ResolveApplicationUri(Uri relativeUri)
    {

        return new Uri(new Uri(new Uri(_requestMessage.RequestUri.GetLeftPart(UriPartial.Authority)), _virtualPathRoot), relativeUri);
    }

}
10
Darrel Miller

Urlヘルパークラスから次のスニペットを使用します

Url.Link("DefaultApi", new { controller = "Person", id = person.Id })

完全な記事はこちらから入手できます。 http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx =

これは、ヘルパーや回避策を必要としない公式の方法です。このアプローチを見ると、ASP.NET MVCのようなものです

8
Raffaeu
new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)
3
MoonStom

最初にHttpContext.Current.Request.Url.ToString();を使用して完全なURLを取得し、Replace( "user/login"、 "")を使用してメソッドのURLを置き換えます。

完全なコードは

string Host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")
2
Shafiq Rabbi

これがWeb API 2の追加かどうかはわかりませんが、RequestContextにはUrlであるUrlHelperプロパティがあります: HttpRequestContext PropertiesLinkおよびContentメソッドがあります。詳細 ここ

1
Mrchief

Athaduの答えに基づいて、拡張メソッドを作成し、コントローラクラスでthis.RootUrl();によってルートURLを取得できます

public static class ControllerHelper
{
    public static string RootUrl(this ApiController controller)
    {
        return controller.Url.Content("~/");
    }
}
1
yu yang Jian

ASP.NET Core ApiControllerでは、Requestプロパティはメッセージのみです。ただし、期待される情報を取得できるContext.Requestはまだあります。個人的に私はこの拡張方法を使用します:

public static string GetBaseUrl(this HttpRequest request)
{
    // SSL offloading
    var scheme = request.Host.Host.Contains("localhost") ? request.Scheme : "https";
    return $"{scheme}://{request.Host}{request.PathBase}";
}
0
Jan Zahradník
  1. 認証
    1.1 https://lalpathlabs.com/partner/api/v1/login
    これは、ユーザー名とパスワードに基づいて既存のユーザーを認証するために使用されます。
    リクエストJSON:{"ユーザー名": ""、 "パスワード": ""}
    フィールド備考タイプ長さ必須のユーザー名ユーザー文字列のユーザー名3-20はいパスワードユーザーのパスワード文字列3-30はい
    期待される応答:200(成功)
    {"firstName": "Shishir"、 "lastName": "Shukla"、 "token": "q6anhl96p9ilikkbe2r84pfatd2dh9e2"}
    400(不正なリクエスト)401(未承認)
0
krishna

GETをページに送信すると、返信されたコンテンツがanswer.Base url:http://website/api/になります

0
zeo