url वेब एपीआई नियंत्रक में बेस यूआरएल कैसे प्राप्त करें?




asp.net-web-api base-url (11)

new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)

मुझे पता है कि मैं एक विशिष्ट मार्ग के यूआरएल प्राप्त करने के लिए Url.Link() का उपयोग कर सकता हूं, लेकिन मैं वेब एपीआई नियंत्रक में वेब एपीआई बेस यूआरएल कैसे प्राप्त कर सकता हूं?


अथडु के जवाब पर आधार, मैं एक विलुप्त होने की विधि लिखता हूं, फिर नियंत्रक कक्षा में आप इसे रूट यूआरएल प्राप्त कर सकते हैं। रूट यूआरएल this.RootUrl();

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

यूआरएल सहायक वर्ग से निम्नलिखित स्निपेट का प्रयोग करें

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

यह आधिकारिक तरीका है जिसके लिए किसी भी सहायक या कामकाज की आवश्यकता नहीं होती है। यदि आप इस दृष्टिकोण को देखते हैं तो एएसपी.नेट एमवीसी की तरह है


यही है वह जो मेरे द्वारा उपयोग किया जाता है:

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

मैं इस सेवा को अपने नियंत्रकों में इंजेक्ट करता हूं।

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

}

अल WebApi 2, बस HttpContext.Current.Request.Path बुलाओ;


Url.Content("~/")

मेरे लिए काम किया!


HttpRequestMessage

request.Headers.Host

किसी पृष्ठ पर एक GET भेजें और उत्तर दिया गया उत्तर उत्तर होगा। बेस यूआरएल: http://website/api/


आप HttpRequestContext ( request.GetRequestContext().VirtualPathRoot HttpRequestContext से HttpRequestContext VirtualPathRoot गुण का उपयोग कर सकते हैं request.GetRequestContext().VirtualPathRoot






asp.net-web-api2