এএসপি.এনইটি এমভিসিতে একই নিয়ন্ত্রক অ্যাকশনে GET এবং পোস্ট করুন


91

আমি উভয় গেটের পাশাপাশি পোস্টগুলিতেও একক ক্রিয়া প্রতিক্রিয়া জানাতে চাই। আমি নিম্নলিখিত চেষ্টা করেছিলাম

[HttpGet]
[HttpPost]
public ActionResult SignIn()

কাজ করে বলে মনে হচ্ছে না। কোনও পরামর্শ ?


4
সমস্যাটি ব্যাখ্যা করার জন্য: ক্রিয়াটি উপেক্ষা করা হয়। প্রতিটি অ্যাট্রিবিউট অন্য সমস্ত অনুরোধ পদ্ধতি বাদ দেবে, সুতরাং ক্রিয়াটি কোনও অনুরোধের পদ্ধতি গ্রহণ না করেই শেষ হয়।
গুফা

এএসপি.নেট এমভিসি 2 এবং ভিজ্যুয়াল স্টুডিও ২০১০-এ ওপির উদাহরণ ("[স্বীকৃতিপর্বগুলি (এইচটিটিপি ভার্সস.গেট)]", ইত্যাদির সাথে) সংকলন ত্রুটি দেয়: "ডুপ্লিকেট 'অ্যাকসেপ্টভারবারস' অ্যাট্রিবিউট"।
ডেভড

4
@ ডেভ আপনি করছেন [AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]নাকি [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]? আমি এই বৈশিষ্ট্যগুলি সম্পর্কে কিছুই জানি না তবে আপনি যদি দ্বিতীয়টি করছেন তবে এটির কারণ হতে পারে error
জেয়ার্ড

উত্তর:


134

এটি AcceptVerbs বৈশিষ্ট্যটি ব্যবহার করে সম্ভব। এটি কিছুটা ভার্বোজ তবে আরও নমনীয়।

[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}

আরো MSDN


4
হ্যাঁ, তবে কী পদ্ধতি যদি প্যারামিটারগুলি ব্যবহার করে (যেমন সাইনইন (সিঙ্গিনপ্যারাম প্যারামিটার)) ... জিইটি-র জন্য, সেগুলি ইউআরআই থেকে নেওয়া হয়েছে (সুতরাং [ফ্রিউড়ি] নির্দিষ্ট করতে হবে) এবং পোস্টের জন্য সেগুলি শরীর থেকে নেওয়া হয়েছে (সুতরাং [ ফ্রমবিডি] নির্দিষ্ট করতে হবে)?
michal.jakubeczy

64

ক্রিয়াগুলি GETs এবং POST উভয়কেই ডিফল্টরূপে প্রতিক্রিয়া জানায়, তাই আপনাকে কোনও কিছুই নির্দিষ্ট করতে হবে না:

public ActionResult SignIn()
{
    //how'd we get here?
    string method = HttpContext.Request.HttpMethod;
    return View();
}

আপনার প্রয়োজনের উপর নির্ভর করে আপনি এখনও HTTPContext.Request.HttpMethod মানটি অপারেটিং করে এইচটিটিপিথ মেথডের উপর নির্ভর করে বিভিন্ন যুক্তি সম্পাদন করতে পারেন।


4
আপনি দেখার মডেলগুলি ব্যবহার করার চেষ্টা না করা পর্যন্ত এটি ঠিক আছে! পোস্ট অ্যাকশনে আপনি সাধারণত ভিউমডেলে পাস করতে পারেন, আমি একটি alচ্ছিক প্যারাম ব্যবহার করার চেষ্টা করেছি এবং এটি বাতিল করতে ডিফল্ট করব তবে এটি কার্যকর হয় না।
জেবেকটন

4
@ জেব্যাক্টন সাধারণত আমার কাছে জিইটি পদ্ধতি রয়েছে যার সবেমাত্র ক্যোয়ারিং স্ট্রিং প্যারাম রয়েছে SignIn(Guid? UserId)এবং পোস্টের ভিউ মডেল রয়েছে SignIn(SomeVM vm)এবং উভয়ই একটি ভাগ করে নেওয়া ব্যক্তিগত পদ্ধতি কল করে SignInHandleGetPost(...)... যা সম্ভবত ভিএম লাগে যে জিইটি পদ্ধতিটি অবশ্যই শুরু করতে হবে, বা orচ্ছিক প্যারামগুলি, বা আপনি যা করতে পছন্দ করেন পুনঃব্যবহারযোগ্য / ভাগ করা কোড রিফ্যাক্টরিংয়ের জন্য।
આરોোনলএস

4
@ জেবেকটন আমি এখনই এএসপি.নেট এমভিসি 4.6.1 নমুনা প্রকল্পটি পদ্ধতি সহ এটি চেষ্টা করেছি AccountController.Login(String returnUrl, LoginViewModel model)এবং এটি দুর্দান্ত কাজ করে। modelজিইটি-র কাছে নাল এবং পোষ্টে নন-নাল। তবে [ValidateForgeryToken]ওভাররাইড করা দরকার কারণ ValidateForgeryTokenজিইটি অনুরোধগুলিতে একটি ব্যতিক্রম ছুঁড়ে।
দাই

0
[HttpGet]
public ActionResult SignIn()
{
}

[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}

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

তারপরে আপনার কুর্টসের উত্তর অনুসরণ করতে হবে। কোনও গুণাবলী উভয়ই পরিচালনা করবে না। যদি আপনি পোষ্ট অনুরোধগুলি বিভিন্ন ক্রিয়ায় যাওয়ার চেষ্টা করে থাকেন তবে তা সম্ভব নয়। আপনার ক্রিয়াটি আপনি স্যুইচিংটি সম্পাদন করতে হবে।
জেরেমি বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.