আমি কীভাবে এএসপি.নেট কোর এমভিসিতে url রেফারার পেতে পারি?


99

আমি একটি এএসপি.নেট এমভিসি ওয়েবফর্মটিকে এএসপি.নেট কোর এমভিসিতে স্থানান্তরিত করার চেষ্টা করছি। বর্তমানে Request.UrlReferrerক্লাস নিয়ে আমার সমস্যা হচ্ছে ।

মূল লাইনটি হ'ল:

    [HttpPost]
    public async Task<ActionResult> ContactUsFormSubmit(ContactUs request)
    {
        var siteUrl = Request.UrlReferrer.ToString().ToLower();
        ....
    }

তবে, এএসপি.এনইটি কোর সহ, আরআরলিফার পাওয়া যায় না। আমি নিম্নলিখিতটি পেয়েছি:

    Request.Headers["Referer"]

যা স্ট্রিংয়ের পরিবর্তে স্ট্রিংভ্যালুগুলি দেয়। আমি এটিকে ব্যবহার করার চেষ্টা করা উচিত কিনা বা এই পরিস্থিতির কোনও সমাধান আছে কিনা তা আমি নিশ্চিত নই। Request.ServerVariablesএছাড়াও উপলভ্য নয় বা সম্ভবত আমার নাম স্থান নেই। আমার নাম স্থানগুলি নিম্নরূপ:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

যদি কেউ আমাকে সঠিক দিকে পরিচালিত করতে পারে তবে আমি সত্যই প্রশংসা করব।


4
গুগলের মতো কিছু সাইট সুরক্ষার কারণে আপনাকে রেফার দিতে পারে না। গুগল চোখ থেকে: গুগল চায় না যে আপনি অনুসন্ধানের পাঠ্যটি দেখতে পাবেন যা রেফারারের অংশ হবে।
বেঞ্জামিন অ্যাবট

এফওয়াইআই: ইউআরএল রেফার নির্ভরযোগ্য নয়।
জিতুন

উত্তর:


154

আপনি বেশিরভাগ ওখানেই থাকেন. StringValuesক্লাসটি ফ্রেমওয়ার্কে স্ট্রিংগুলি দক্ষতার সাথে উপস্থাপন করতে কেবল এএসপি.এনইটি ব্যবহার করে এমন একটি প্রকার। বিশেষত HttpContextঅবজেক্টে। ToString()এটিকে স্ট্রিংয়ে রূপান্তর করতে আপনি কেবল এটির উপর কল করতে পারেন :

string referer = Request.Headers["Referer"].ToString();

4
আপনি কি এটি করার একটি নির্ভরযোগ্য উপায় হিসাবে বিবেচনা করবেন? কোন বিকল্প উপায় আছে?
কামাল তেজার দিলসিজ

4
ক্লায়েন্ট কর্তৃক প্রেরিত অনুরোধ শিরোনাম থেকে সম্পত্তি অ্যাক্সেসের ক্ষেত্রে এটি নির্ভরযোগ্য। তবে, আমি খুব সহজেই মেজাজের দ্বারা নির্ভরযোগ্য ক্লায়েন্টের দ্বারা পাঠানো রেফারারের শিরোনামের মানটি বিবেচনা করব না ।
হেন্ক মোল্লেমা

70
যারা কৌতূহল তাদের জন্য যদি রেফারকে অ্যাওয়ারে ভুল বানান করা হয় তবে তা হয় না। যদিও রেফারারটি সঠিক বানান, তবুও তারা এইচটিটিপি স্পেসিফিকেশন ইংরাজী.স্ট্যাকেক্সেঞ্জার
ফ্র্যাঙ্ক

4
us

4
পছন্দ করেছেন যে দোষী এটির ভুল বানান করেছে তাকে কি বের করে দেওয়া হয়েছে?
মাইকেল ট্রানকিডা


9

এখানে আমি কীভাবে ইউআরএল রেফার পেয়েছি:

@{
string referer = Context.Request.Headers["Referer"].ToString();
Uri baseUri = new Uri(referer);}


<form asp-action="Login" asp-route-returnUrl="@baseUri.AbsolutePath">

আপনি উদাহরণটিতে যেমন দেখিয়েছিলেন তেমন রেজার পৃষ্ঠায় কনটেক্সট কীভাবে অ্যাক্সেস করবেন? আমি কোডটি যুক্ত করেছি তবে প্রসঙ্গটি অপরিজ্ঞাত।
জেডজিপ

আমি এটি সিস্টেমের ওয়েবভিউপেজ ক্লাস থেকে পেয়েছি e ওয়েব.এমভিসি
ইনতেসার আলম

7
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;

var referer = ((FrameRequestHeaders)Request.Headers).HeaderReferer.FirstOrDefault();

যাদু স্ট্রিং ছাড়া গ্রহণযোগ্য উত্তর হিসাবে প্রায় একই


তবে কি কোনও Nugetপ্যাকেজ প্রয়োজন ( Microsoft.AspNetCore.Server.Kestrel) ... এটিও কাজ করার জন্য পরীক্ষা করা হয়েছে IISExpress? SSL? ইত্যাদি?
সেরজ সাগান

4
@ সেরজসাগান আমার বিপরীতে টাইপ সুরক্ষা দ্বারা প্রদত্ত কোড কফিডেন্স (অন্যান্য সমাধানের জন্য যাদু স্ট্রিংয়ের পক্ষে হিসাবে বিবেচিত) হোস্টিংয়ের ক্ষেত্রে অতিরিক্ত সংখ্যার তুলনায় অনেক বেশি, যেহেতু এটি ক্যাসট্রেলের উপর নির্ভর করে এটি সমস্ত হোস্টিং পদ্ধতিতে কাজ করা উচিত। এসএসএল পরীক্ষা করা হয়নি তবে এটির কোনও পার্থক্য করা উচিত নয়
সৌহাইব বেসবস

1

এটি কাজ করে (। নেট কোর 3.1 তে পরীক্ষিত):

Request.GetTypedHeaders().Referer

Requestউভয়ের সম্পত্তি ControllerBase(এবং তাই Controllerখুব) এবং HttpContextতাই আপনি এটি যে কোনও একটি থেকে পেতে পারেন।

উদাহরণস্বরূপ, একটি নিয়ামক পদক্ষেপ থেকে রেফারিং পৃষ্ঠাতে পুনর্নির্দেশ করতে, কেবল এটি করুন:

public IActionResult SomeAction()
{
    return Redirect(Request.GetTypedHeaders().Referer.ToString());
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.