কীভাবে এসপি নেট কোর 1.0 তে বর্তমান ইউআরএল পাবেন


108

পূর্ববর্তী সংস্করণগুলিতে এসপ নেট, আমরা ব্যবহার করতে পারি

@Request.Url.AbsoluteUri

তবে মনে হচ্ছে এটি বদলে গেছে। আমরা কীভাবে এএসপিএন কোর 1.0 এ পারি?



6
@ ডেভিডজি মনে হচ্ছে আপনি এখন ইউরিহেল্পার.গেটডিসপ্লে ইউল (পুনরায় অনুসন্ধান) ব্যবহার করতে পারেন
মার্ক

উত্তর:


128

আপনাকে পৃথকভাবে হোস্ট এবং পথ পেতে হবে।

 @Context.Request.Host@Context.Request.Path

15
আপনার অ্যাপটি ভার্চুয়াল ডিরেক্টরিতে বসে থাকলে এটি সঠিক url এর প্রতিবেদন করবে না। আপনাকে অনুরোধের সাথে প্রিফিক্স করতে হবে ath অনুরোধের সাথে পাঠ্য মান .পথবেস মান যদি থাকে তবে। এটি এই প্রশ্নের পাশাপাশি অন্যান্য সমস্ত উত্তরের ক্ষেত্রেও প্রযোজ্য।
প্যাডিগান

@এটি দুটি স্ট্রিংয়ের মধ্যে কী ? আপনি এটা ব্যাখ্যা করতে পারেন?
মোহাম্মদ নুরাল্ডিন

4
@ মোহাম্মদ নূরল্ডিন: এটি রেজার ভিউ সিনট্যাক্স।
jack.pop 8

4
ক্ষুরের পৃষ্ঠাগুলির জন্য আমাকে এর @HttpContextপরিবর্তে ব্যবহার করতে হয়েছিল @Context। আংশিক দর্শন @Contextকাজের জন্য। আমি কি একটি ব্যবহার ভুলে গেছি?
অ্যান্ড্রিওড

4
এমভিসি Url.Action("Action", null, null, Request.Url.Scheme); স্ট্যাকওভারফ্লো
দান

112

আপনার স্কিম, হোস্ট, পাথ এবং ক্যোয়ারী স্ট্রিং দরকার

@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)

বা নতুন সি # 6 বৈশিষ্ট্য "স্ট্রিং ইন্টারপোলেশন" ব্যবহার করে

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

4
আপনি কীভাবে খণ্ডটি পাবেন, টেস্ট.com / abc #123 বলুন , আপনি কীভাবে অনুরোধ থেকে # 123 খণ্ডটি পাবেন?
রায়

5
@ ফ্যানারে আপনি পারবেন না ব্রাউজারগুলি সার্ভারে ইউআরআই-টুকরা পাঠাচ্ছে না
tmg

ইউআরএল তৈরির জন্য ইউরিবিল্ডার ব্যবহার বিবেচনা করুন ।
এরিক ফিলিপস

87

আপনি এর এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন Request:

Request.GetDisplayUrl()

34
আপনি যদি যোগ করেন @using Microsoft.AspNetCore.Http.Extensionsতবে এটি কাজ করে@Context.Request.GetDisplayUrl()
Serj Sagan

4
এখনও পাওয়া যাচ্ছে - বর্তমান প্রসঙ্গে অনুরোধটির অস্তিত্ব নেই
SeanMC

4
এই ফাংশনটির জন্য ইন্টেলিজেন্স সংক্ষিপ্তসারটি মনে রাখবেন এর Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.ভিত্তিতে, আমি মনে করি @ টিএমজি এর সমাধানটি সেরা (সম্ভবত আপনার নিজের এক্সটেনশন পদ্ধতিতে আবৃত)।
গর্ডন গ্লাস

আপনি যদি এটির একই ধরণের url অবজেক্টটিতে এটি ব্যবহার করতে চান তবে আপনি একবার ইউআরএল ডিসপ্লে ইউআরএল করতে পারেন: var uri = new Uri (displayUrl);
rdans

16

উরির AbsolveUri সম্পত্তি ব্যবহার করুন। নেট কোর সহ আপনাকে অনুরোধ থেকে এইভাবে উড়ি তৈরি করতে হবে,

 var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");

 var url = location.AbsoluteUri;

উদাহরণস্বরূপ যদি অনুরোধটি url হয় তবে ' http://www.contoso.com/catolog/shownew.htm?date=today ' এটি একই ইউআরএল ফিরিয়ে দেবে।


10
এই জাতীয় জিনিসগুলি আমাকে ভাবতে বাধ্য করে। নেট কোর কিছু উপায়ে পিছনের দিকে back এটি কি অনুরোধের চেয়ে ভাল Asএএসপি নেট থেকে কোনওভাবেই আমি কীভাবে কল্পনা করতে পারছি না?
Soenhay

16

এটি নেট কোর ১.০ সহ আপাতভাবে সম্ভব ছিল Microsoft.AspNetCore.Http.Extensions, যা HttpRequestসম্পূর্ণ ইউআরএল পেতে এক্সটেনশন যুক্ত করে ; GetEncodedUrl

যেমন রেজার ভিউ থেকে:

@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>

২.০ থেকে, আপেক্ষিক পাথ এবং গেটইনকোডপ্যাথএন্ডকিউয়ের ক্যোয়ারীও রয়েছে


8

আপনি এই এক্সটেনশন পদ্ধতিটি ব্যবহার করতে বিবেচনা করতে পারেন ( Microsoft.AspNetCore.Http.Extensionsনামস্থান থেকে :

@Context.Request.GetDisplayUrl()

আমার কিছু প্রকল্পের জন্য আমি আরও নমনীয় সমাধান পছন্দ করি। দুটি এক্সটেনশন পদ্ধতি রয়েছে।

1) প্রথম পদ্ধতিটি Uriইনকামিং রিকোয়েস্ট ডেটা থেকে অবজেক্ট তৈরি করে (metersচ্ছিক পরামিতিগুলির মাধ্যমে কিছু ভেরিয়েন্ট সহ)। 2) দ্বিতীয় পদ্ধতিটি নিম্নোক্ত ফর্ম্যাটে Uriঅবজেক্ট গ্রহণ করে এবং রিটার্ন দেয় string(কোনও পিছনে স্ল্যাশ ছাড়াই): স্কীম_হোস্ট_পোর্ট

public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true)
    {
        var uriBuilder = new UriBuilder
        {
            Scheme = request.Scheme,
            Host = request.Host.Host,
            Port = request.Host.Port.GetValueOrDefault(80),
            Path = addPath ? request.Path.ToString() : default(string),
            Query = addQuery ? request.QueryString.ToString() : default(string)
        };
        return uriBuilder.Uri;
    }

    public static string HostWithNoSlash(this Uri uri)
    {
        return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
    }

ব্যবহার:

//before >> https://localhost:44304/information/about?param1=a&param2=b
        Request.GetUri(addQuery: false);
        //after >> https://localhost:44304/information/about

        //before >> https://localhost:44304/information/about?param1=a&param2=b
        new Uri("https://localhost:44304/information/about?param1=a&param2=b").GetHostWithNoSlash();
        //after >> https://localhost:44304

7
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
    var rq = httpContext.Request;
    return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}

তবে কোথায় httpContextপাচ্ছ? এটি নিয়ে কাজ হচ্ছে না Microsoft.AspNetCore.Http.HttpContext.Request
টম স্টিকেল

7

আপনি যদি অনুরোধটি থেকে পোর্টRequest.Host নম্বরটিও সন্ধান করতে চান তবে আপনাকে এসপনেট কোর এর সম্পত্তি হিসাবে এটি অ্যাক্সেস করতে হবে ।

Request.Hostসম্পত্তি নয় কেবল একটি স্ট্রিং পরিবর্তে, একটি বস্তুর উভয় হোস্ট ডোমেন ঝুলিতে কিন্তু, এবং পোর্ট নম্বর। পোর্ট নম্বর বিশেষভাবে হয়, তাহলে বাইরে লিখিত URL টি (অর্থাৎ "https://example.com:8080/path/to/resource"), তারপর কলিং Request.Hostজন্য, হোস্ট ডোমেন এবং তাই মত পোর্ট নম্বর দিতে হবে: "example.com:8080"

আপনি যদি কেবল হোস্ট ডোমেনের মান চান বা কেবল পোর্ট নম্বরের জন্য মান চান তবে আপনি সেই বৈশিষ্ট্যগুলি স্বতন্ত্রভাবে (যেমন Request.Host.Hostবা Request.Host.Port) অ্যাক্সেস করতে পারেন ।


7

গৃহীত উত্তরটি আমাকে সহায়তা করেছিল, যেমনটি @ পেডিগান থেকে এর জন্য মন্তব্য করেছে তবে আপনি যদি আমার ক্ষেত্রে যেমন ক্যোরি-স্ট্রিং প্যারামিটারগুলি অন্তর্ভুক্ত করতে চান তবে এটি চেষ্টা করুন:

@Context.Request.PathBase@Context.Request.GetEncodedPathAndQuery()

এবং @using Microsoft.AspNetCore.Http.ExtensionsgetEncodedPathAndQuery () পদ্ধতিটি উপলভ্য হওয়ার জন্য আপনাকে ভিউটিতে যুক্ত করতে হবে।


2

রেজার পৃষ্ঠা বা পেজমোডেল ক্লাস থেকে বর্তমান ইউআরএল পাওয়ার একটি পরিষ্কার উপায় আছে। এটাই:

Url.PageLink()

দয়া করে নোট করুন যে আমি বোঝাতে চেয়েছি, "ASP.NET কোর রেজার পেজ ", এমভিসি নয় not

আমি যখন এএসপি.নেট কোর রেজার পৃষ্ঠাগুলিতে ক্যানোনিকাল ইউআরএল মেটা ট্যাগ মুদ্রণ করতে চাই তখন আমি এই পদ্ধতিটি ব্যবহার করি। তবে একটি ধরা আছে। এটি আপনাকে সেই URL দেবে যা সেই পৃষ্ঠার জন্য সঠিক URL বলে মনে করা হচ্ছে। আমাকে বিস্তারিত বলতে দাও.

বলুন, আপনি আপনার পৃষ্ঠার জন্য "আইডি" নামে একটি রুট সংজ্ঞায়িত করেছেন এবং তাই আপনার ইউআরএলটি দেখতে হবে

http://example.com/product?id=34

আরআল.পেজলিংক () আপনাকে উপরে বর্ণিত URL হিসাবে ঠিক সেই URL দেবে।

এখন, যদি ব্যবহারকারী সেই ইউআরএলটিতে অতিরিক্ত কিছু যোগ করে, বলুন,

http://example.com/product?id=34&somethingElse

তারপরে, আপনি এই পদ্ধতিটি থেকে "কিছু" কিছু পাবেন না। এবং এই কারণেই এটি HTML পৃষ্ঠায় ক্যানোনিকাল ইউআরএল মেটা ট্যাগ প্রিন্ট করার জন্য ঠিক ভাল good

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.