পূর্ববর্তী সংস্করণগুলিতে এসপ নেট, আমরা ব্যবহার করতে পারি
@Request.Url.AbsoluteUri
তবে মনে হচ্ছে এটি বদলে গেছে। আমরা কীভাবে এএসপিএন কোর 1.0 এ পারি?
পূর্ববর্তী সংস্করণগুলিতে এসপ নেট, আমরা ব্যবহার করতে পারি
@Request.Url.AbsoluteUri
তবে মনে হচ্ছে এটি বদলে গেছে। আমরা কীভাবে এএসপিএন কোর 1.0 এ পারি?
উত্তর:
আপনাকে পৃথকভাবে হোস্ট এবং পথ পেতে হবে।
@Context.Request.Host@Context.Request.Path
@
এটি দুটি স্ট্রিংয়ের মধ্যে কী ? আপনি এটা ব্যাখ্যা করতে পারেন?
@HttpContext
পরিবর্তে ব্যবহার করতে হয়েছিল @Context
। আংশিক দর্শন @Context
কাজের জন্য। আমি কি একটি ব্যবহার ভুলে গেছি?
Url.Action("Action", null, null, Request.Url.Scheme);
স্ট্যাকওভারফ্লো
আপনার স্কিম, হোস্ট, পাথ এবং ক্যোয়ারী স্ট্রিং দরকার
@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}")
আপনি এর এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন Request
:
Request.GetDisplayUrl()
@using Microsoft.AspNetCore.Http.Extensions
তবে এটি কাজ করে@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
ভিত্তিতে, আমি মনে করি @ টিএমজি এর সমাধানটি সেরা (সম্ভবত আপনার নিজের এক্সটেনশন পদ্ধতিতে আবৃত)।
উরির 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 ' এটি একই ইউআরএল ফিরিয়ে দেবে।
এটি নেট কোর ১.০ সহ আপাতভাবে সম্ভব ছিল Microsoft.AspNetCore.Http.Extensions
, যা HttpRequest
সম্পূর্ণ ইউআরএল পেতে এক্সটেনশন যুক্ত করে ; GetEncodedUrl ।
যেমন রেজার ভিউ থেকে:
@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>
২.০ থেকে, আপেক্ষিক পাথ এবং গেটইনকোডপ্যাথএন্ডকিউয়ের ক্যোয়ারীও রয়েছে ।
আপনি এই এক্সটেনশন পদ্ধতিটি ব্যবহার করতে বিবেচনা করতে পারেন ( 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¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=b").GetHostWithNoSlash();
//after >> https://localhost:44304
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
আপনি যদি অনুরোধটি থেকে পোর্টRequest.Host
নম্বরটিও সন্ধান করতে চান তবে আপনাকে এসপনেট কোর এর সম্পত্তি হিসাবে এটি অ্যাক্সেস করতে হবে ।
Request.Host
সম্পত্তি নয় কেবল একটি স্ট্রিং পরিবর্তে, একটি বস্তুর উভয় হোস্ট ডোমেন ঝুলিতে কিন্তু, এবং পোর্ট নম্বর। পোর্ট নম্বর বিশেষভাবে হয়, তাহলে বাইরে লিখিত URL টি (অর্থাৎ "https://example.com:8080/path/to/resource"
), তারপর কলিং Request.Host
জন্য, হোস্ট ডোমেন এবং তাই মত পোর্ট নম্বর দিতে হবে: "example.com:8080"
।
আপনি যদি কেবল হোস্ট ডোমেনের মান চান বা কেবল পোর্ট নম্বরের জন্য মান চান তবে আপনি সেই বৈশিষ্ট্যগুলি স্বতন্ত্রভাবে (যেমন Request.Host.Host
বা Request.Host.Port
) অ্যাক্সেস করতে পারেন ।
গৃহীত উত্তরটি আমাকে সহায়তা করেছিল, যেমনটি @ পেডিগান থেকে এর জন্য মন্তব্য করেছে তবে আপনি যদি আমার ক্ষেত্রে যেমন ক্যোরি-স্ট্রিং প্যারামিটারগুলি অন্তর্ভুক্ত করতে চান তবে এটি চেষ্টা করুন:
@Context.Request.PathBase@Context.Request.GetEncodedPathAndQuery()
এবং @using Microsoft.AspNetCore.Http.Extensions
getEncodedPathAndQuery () পদ্ধতিটি উপলভ্য হওয়ার জন্য আপনাকে ভিউটিতে যুক্ত করতে হবে।
রেজার পৃষ্ঠা বা পেজমোডেল ক্লাস থেকে বর্তমান ইউআরএল পাওয়ার একটি পরিষ্কার উপায় আছে। এটাই:
Url.PageLink()
দয়া করে নোট করুন যে আমি বোঝাতে চেয়েছি, "ASP.NET কোর রেজার পেজ ", এমভিসি নয় not
আমি যখন এএসপি.নেট কোর রেজার পৃষ্ঠাগুলিতে ক্যানোনিকাল ইউআরএল মেটা ট্যাগ মুদ্রণ করতে চাই তখন আমি এই পদ্ধতিটি ব্যবহার করি। তবে একটি ধরা আছে। এটি আপনাকে সেই URL দেবে যা সেই পৃষ্ঠার জন্য সঠিক URL বলে মনে করা হচ্ছে। আমাকে বিস্তারিত বলতে দাও.
বলুন, আপনি আপনার পৃষ্ঠার জন্য "আইডি" নামে একটি রুট সংজ্ঞায়িত করেছেন এবং তাই আপনার ইউআরএলটি দেখতে হবে
http://example.com/product?id=34
আরআল.পেজলিংক () আপনাকে উপরে বর্ণিত URL হিসাবে ঠিক সেই URL দেবে।
এখন, যদি ব্যবহারকারী সেই ইউআরএলটিতে অতিরিক্ত কিছু যোগ করে, বলুন,
http://example.com/product?id=34&somethingElse
তারপরে, আপনি এই পদ্ধতিটি থেকে "কিছু" কিছু পাবেন না। এবং এই কারণেই এটি HTML পৃষ্ঠায় ক্যানোনিকাল ইউআরএল মেটা ট্যাগ প্রিন্ট করার জন্য ঠিক ভাল good