আমি কীভাবে একটি ডাব্লুসিএফ REST পদ্ধতি থেকে কাস্টম এইচটিটিপি স্থিতি কোডটি ফিরিয়ে দিতে পারি?


88

যদি কোনও ডাব্লুসিএফ আরএসটি কলটিতে কোনও ভুল হয়ে যায়, যেমন অনুরোধকৃত উত্স পাওয়া যায় না, তবে আমি কীভাবে এইচটিটিপি রেসপন্স কোডটি খেলতে পারি (উদাহরণস্বরূপ HTTP 404 এর মতো কিছুতে সেট করে) আমার অপারেশনকন্ট্র্ট পদ্ধতিতে?


ঠিক আছে এই ধারনা নিয়ন্ত্রণের সমস্ত উত্তর এটিকে আপনার পরিষেবা বাস্তবায়নে রূপান্তরিত করে। যদি তারা কিছু অবৈধ ইউরি পাস করে? আপনি কীভাবে মনে করেন যে আপনার পরিষেবাতে সমস্ত অপ্রত্যাশিত হিটগুলির জন্য একটি 404 সরবরাহ করবেন?
নাথান ট্রেগিলাস

উত্তর:


112

এমন একটি রয়েছে WebOperationContextযা আপনি অ্যাক্সেস করতে পারেন এবং এটির মধ্যে এমন একটি OutgoingResponseসম্পত্তি রয়েছে OutgoingWebResponseContextযার মধ্যে একটি StatusCodeসম্পত্তি সেট করা যায়।

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

4
ডাব্লুসিএফ ডেটা সার্ভিসেস - সার্ভিস অপারেশনগুলির মধ্যে কি এই কাজ করে? আমার ভাগ্য হয় নি, মনে হয় আমি যে স্ট্যাটাসকোড সেট করেছি সেটি অন্য কোনও কিছুর দ্বারা তুচ্ছ হয়ে যায়। সুতরাং সমস্ত এইচটিটিপি পোস্ট অনুরোধে, আমি ২০০০-এ সেট না করেই 204 ফিরে পেয়েছি।
রাইবোল্ট

4
আমার ক্ষেত্রে কাজ করে না, স্ট্যাটাসটি ওভাররাইট হয়ে যায়। একটি নিক্ষেপ WebFaultExceptionকরা কাজ করে বলে মনে হচ্ছে।
জোশ এম

74

যদি আপনাকে কোনও কারণে বডি ফেরত নিতে হয় তবে ওয়েবফল্টএক্সসেপশনটি একবার দেখুন

উদাহরণ স্বরূপ

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );

4
আমি এটি গ্রহণযোগ্যটির চেয়ে আরও ভাল পছন্দ করি যেহেতু আমরা স্থিতিশীল ওয়েব-অপারেশন কনটেক্সটটি ব্যবহার করি না urrent বর্তমান
নোয়েল আবরাহামস

মনে রাখা এই যেহেতু famework 4 শুধুমাত্র বৈধ msdn.microsoft.com/en-us/library/dd989924.aspx
sebagomez

4
হুম, নেট .৪.৫.১ এ আমার জন্য স্থিতি কোডটি সেট করছে না, আমি এখনও ২০০ পাচ্ছি I'm পূর্ণসংখ্যা
শাওয়াইস

4
এটি 2 এক্সএক্স কোডের বাইরের যে কোনও কিছুর জন্য দুর্দান্ত বলে মনে হচ্ছে, তবে আপনি কি একটি WebFaultExceptionফেরত দিতে নিক্ষেপ করবেন HttpStatusCode.Created?
ক্রাশ করুন

23

404 জন্যে রয়েছে উপর পদ্ধতিতে নির্মিত WebOperationContext.Current.OutgoingResponse নামক SetStatusAsNotFound (STRING বার্তা) যে 404 থেকে স্থিতি কোড এবং এক কলে একটি অবস্থা বর্ণনা সেট হবে।

এখানে নোট করুন, সেটস্ট্যাটাসএসক্রিয়েটেড (উরি অবস্থান) যা এক কল দিয়ে স্থিতি কোডটি 201 এবং অবস্থানের শিরোনামকে সেট করবে।


এটি কি গ্রহণযোগ্য উত্তরে প্রদর্শিত পদ্ধতির চেয়ে বেশি পছন্দ করে?
ক্রাশ করুন

2

আপনি যদি শিরোনামে স্থিতির বিবরণটি দেখতে চান, তবে REST পদ্ধতিটি নীচের মত ক্যাচ () বিভাগ থেকে ফিরে আসা নিশ্চিত করবে:

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}

4
এটি আমার পক্ষে কাজ করে না, আমি এখনও 200 পাই I'm কিন্তু এটা কিছু উচিত নয়, এটা করা উচিত?
শাওয়াইস

2

এছাড়াও আপনি সঙ্গে একটি statuscode এবং কারন শরীর আসতে পারেন WebOperationContext এর StatusCode এবং StatusDescription :

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";


0

এটি ডাব্লুসিএফ ডেটা পরিষেবাদির জন্য আমার পক্ষে কাজ করে নি। পরিবর্তে, আপনি ডেটা পরিষেবাগুলির ক্ষেত্রে ডেটা সার্ভিস এক্সসেপশন ব্যবহার করতে পারেন। নিম্নলিখিত পোস্ট দরকারী হিসাবে পাওয়া গেছে। http://social.msdn.microsoft.com/forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de


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