নিয়ামক। নেট এমভিসিতে একটি URL তৈরি করা


131

ইমেল প্রেরণের জন্য কন্ট্রোলারের ক্রিয়ায় আমার একটি লিঙ্ক তৈরি করতে সক্ষম হওয়া দরকার। এটি করার জন্য সেরা অনুশীলন কী? আমার রুটগুলি পরিবর্তিত হলে আমি নিজে এটি তৈরি করতে চাই না।

প্রতিটি ইমেলের জন্য আমার কী দৃষ্টিভঙ্গি থাকা উচিত এবং এটি রেন্ডার করে প্রেরণ করব? এটি এটি করার একটি ভাল উপায় হতে পারে।

উত্তর:


230

আপনি যদি কেবল কোনও নির্দিষ্ট ক্রিয়াটির পথ পেতে চান তবে ব্যবহার করুন UrlHelper:

UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null);

যদি আপনি একটি হাইপারলিঙ্ক তৈরি করতে চান:

string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null);

ইন্টেলিজেন্স আপনাকে প্রতিটি প্যারামিটারের অর্থ দেবে।


মন্তব্যগুলি থেকে আপডেট : কন্ট্রোলারের ইতিমধ্যে একটি রয়েছে UrlHelper:

string url = this.Url.Action("About", "Home", null); 

17
ফলোআপ: দ্বিতীয় থেকে শেষ প্যারামিটারের জন্য (রুটভ্যালিউড অভিধান) এখানে একটি উদাহরণ: নতুন সিস্টেম.ওয়েব.রোটিং.রৌটভ্যালুড অভিধান (নতুন {আইডি = 1})
ম্যাথু এম

15
আপনার একটি নতুন আরলহেল্পার তৈরি করার দরকার নেই; কন্ট্রোলারে একটি .আরএল সম্পত্তি রয়েছে যা আপনাকে সঠিক অনুরোধকন্টেক্সট দিয়ে দেয়।
টোবিয়াস জে

"রুট" কোথা থেকে আসে? আমি যে রুটটির সাথে মেলে চেষ্টা করছি তার নামটি যদি হার্ডকোড করতে হয় তবে কেবল ইউআরএলটিকে হার্ডকোড নয় কেন?
xr280xr

@ xr280xr: আমি এই উদাহরণটিতে বিশ্বাস করি "রুট" হল নিবন্ধের রুটস পদ্ধতিতে (সাধারণত রাউটকনফিগের) সংজ্ঞায়িত রুটের নাম। আমার জন্য এটি ছিল "ডিফল্ট" (যেমনটি আমি যখন আমার প্রকল্পটি তৈরি করেছি তখন)।
অ্যান্ডি

3
আপনার আরলহেল্পার নতুন করার দরকার নেই, কন্ট্রোলার ক্লাসে কেবল ইউরাল সম্পত্তি অ্যাক্সেস করুন।
জে ডগ্লাস

22

আপনার যদি পুরো ইউআরএল প্রয়োজন হয় (উদাহরণস্বরূপ ইমেলের মাধ্যমে প্রেরণের জন্য) নিম্নলিখিত অন্তর্নির্মিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার বিবেচনা করুন:

এটির সাহায্যে আপনি ইউআরএল তৈরির জন্য রুটটি তৈরি করেন:

Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

রুট ইঞ্জিনটি সঠিকটি নির্ধারণের পরে এখানে url নির্মিত হয়েছে:

Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

উভয় পদ্ধতিতে, শেষ 2 প্যারামিটারগুলি প্রোটোকল এবং হোস্টনাম নির্দিষ্ট করে।

শুভেচ্ছা।


7
এফওয়াইআই ব্যবহার Url.Action(action, controller, routevalue, protocol)করে সম্পূর্ণ ইউআরএল উত্পাদন করে, তাই আপনার প্রয়োজন না হলে আপনাকে হোস্টনাম নির্দিষ্ট করতে হবে না।
এন্ডি তজাহোনো

1
আমি নীচের ইউআরএল পোর্ট নম্বর সহ পেয়ে যাচ্ছি দ্বিগুণ আমি কীভাবে এটি দয়া করে ঠিক করব? এইচটিপি: // লোকালহোস্ট: 54383: 54383 / মাইআরিয়া / মাই কনট্রোলার / বিশদ / 1
পতি গুটি

12

আমারও একই সমস্যা ছিল এবং এটি দেখা যাচ্ছে যে গিডনের উত্তরের একটি ছোট্ট ত্রুটি রয়েছে: এটি একটি সম্পর্কিত ইউআরএল উত্পন্ন করে, যা মেইলে পাঠানো যায় না।

আমার সমাধানটি এর মতো দেখাচ্ছে:

string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString });

এইভাবে, একটি সম্পূর্ণ ইউআরএল উত্পন্ন হয়, এবং এটি অ্যাপ্লিকেশনটি হোস্টিং সার্ভারের বিভিন্ন স্তরে গভীর হলেও, এটি ব্যবহার করে এবং 80 এর বাইরে অন্য কোনও বন্দর ব্যবহার করে।

সম্পাদনা করুন: আমি দেখেছি এই পাশাপাশি দরকারী।


দয়া করে মনে রাখবেন এটির একটি প্রধান সুরক্ষিত দুর্বলতা রয়েছে। হ'ল হোস্ট হিসাবে কোনও দূষিত ইউআরএল থাকতে অনুরোধ শিরোনামটি পরিবর্তন করে এমন কেউ হ'ল আপনার অ্যাপ্লিকেশনটি কোনও বিপজ্জনক ওয়েবসাইটে লিঙ্কযুক্ত একটি অফিসিয়াল ইমেল প্রেরণ করবে।
ভি0ल्डেক

7

কোনও ক্রিয়ায় পরম URL তৈরি করার আর একটি উপায়:

var relativeUrl = Url.Action("MyAction");  //..or one of the other .Action() overloads
var currentUrl = Request.Url;

var absoluteUrl = new System.Uri(currentUrl, relativeUrl);

4

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে কেবল আপনি যদি এএসপি.নেট কোরে একই জিনিসটি করার চেষ্টা করছেন, আপনি কীভাবে কোনও ক্রিয়াকলাপের মধ্যে UrlHelper তৈরি করতে পারেন তা এখানে:

var urlHelper = new UrlHelper(this.ControllerContext);

অথবা, আপনি Controller.Urlযদি সম্পত্তিটি উত্তরাধিকার সূত্রে পান তবে আপনি কেবল সম্পত্তিটি ব্যবহার করতে পারেন Controller

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