ومواقع - كيفية الحصول على عنوان URL الأساسي في وحدة تحكم واجهة برمجة تطبيقات الويب؟




تعلم برمجة الويب (9)

Al WebApi 2 ، فقط استدعاء HttpContext.Current.Request.Path ؛

أعلم أنه يمكنني استخدام Url.Link() للحصول على عنوان URL لطريق محدد ، ولكن كيف يمكنني الحصول على عنوان URL الأساسي لواجهة برمجة تطبيقات الويب في وحدة تحكم واجهة برمجة تطبيقات الويب؟


أنا حقن هذه الخدمة في وحدات التحكم الخاصة بي.

 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);
    }

}

إرسال GET إلى صفحة والمحتوى الذي تم الرد عليه سيكون هو answer.Base URL: http://website/api/




قاعدة على الجواب Athadu ، وأنا أكتب أسلوب extenesion ، ثم في فئة وحدة تحكم يمكنك الحصول على رابط الجذر بهذا. this.RootUrl();

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

هذا ما استخدمه:

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));

يمكنك استخدام الخاصية VirtualPathRoot من HttpRequestContext ( request.GetRequestContext().VirtualPathRoot )


new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)




asp.net-web-api2