ওয়েবএপিআই 2 এ ডিফল্টইনলাইন কনস্ট্রেন্টস রিসলভার ত্রুটি


140

আমি ওয়েব এপিআই 2 ব্যবহার করছি এবং আমি যখন আমার স্থানীয় বাক্সে আইআইএস 7.5 ব্যবহার করে আমার এপিআই পদ্ধতিতে একটি পোষ্ট প্রেরণ করি তখন নিম্নলিখিত ত্রুটিটি পাচ্ছি।

The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'string'.

Line 21: GlobalConfiguration.Configuration.EnsureInitialized();

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

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

আমি এখানে কি মিস করছি? এমনকি একটি নতুন প্রকল্পের সাথেও আমি এই সীমাবদ্ধতা সমাধানের সমস্যার সমাধান না করেই জিইটি অনুরোধ করতে সক্ষম নই।

উত্তর:


279

ত্রুটিটির অর্থ হ'ল কোথাও কোনও রুটে, আপনি এর মতো কিছু নির্দিষ্ট করেছেন

[Route("SomeRoute/{someparameter:string}")]

"স্ট্রিং" এর প্রয়োজন হয় না কারণ এটি অনুমিত টাইপ হিসাবে অন্য কোনও কিছু নির্দিষ্ট না করা থাকে।

ত্রুটিটি যেমন ইঙ্গিত করে, সেই DefaultInlineConstraintResolverওয়েব এপিআই শিপগুলিতে একটি ইনলাইন সীমাবদ্ধতা নেই string। ডিফল্ট সমর্থিতগুলি নিম্নলিখিত:

// Type-specific constraints
{ "bool", typeof(BoolRouteConstraint) },
{ "datetime", typeof(DateTimeRouteConstraint) },
{ "decimal", typeof(DecimalRouteConstraint) },
{ "double", typeof(DoubleRouteConstraint) },
{ "float", typeof(FloatRouteConstraint) },
{ "guid", typeof(GuidRouteConstraint) },
{ "int", typeof(IntRouteConstraint) },
{ "long", typeof(LongRouteConstraint) },

// Length constraints
{ "minlength", typeof(MinLengthRouteConstraint) },
{ "maxlength", typeof(MaxLengthRouteConstraint) },
{ "length", typeof(LengthRouteConstraint) },

// Min/Max value constraints
{ "min", typeof(MinRouteConstraint) },
{ "max", typeof(MaxRouteConstraint) },
{ "range", typeof(RangeRouteConstraint) },

// Regex-based constraints
{ "alpha", typeof(AlphaRouteConstraint) },
{ "regex", typeof(RegexRouteConstraint) }

2
আমি ত্রুটিগুলি কেন দেখছিলাম তা বোঝায়। আমার রুট অ্যাট্রিবিউটে আমার {স্ট্রিং: টাইপ। ছিল। আমি এটি সরিয়েছি এবং এটি এখন কাজ করছে working
হ্যালসিওন

3
@ অ্যান্ড্রেসফারস্টার: কারণ stringকোনও সীমাবদ্ধতা প্রয়োগ করতে পারে না।
ডেভ নিউ

31
"স্ট্রিং" এর প্রয়োজন হয় না কারণ এটি অনুমিত টাইপ হিসাবে অন্য কোনও কিছু নির্দিষ্ট না করা থাকে।
অ্যান্ড্রু জেন্স

1
@ অ্যান্ড্রুগ্র্যা এই তালিকাটি এখানে পাওয়া যায়: asp.net/web-api/overview/web-api-routing- এবং-tives/…
লোফগ্রেন

2
যদি সমস্যাটি ছিল কারণ রুটের বৈশিষ্ট্যগুলি যেমন: {স্ট্রিং: টাইপ}, কেবল 'স্ট্রিং:' মুছে ফেলুন
আসফ

33

আর একটি বিষয় যদি আপনি ইনট, বিল বা অন্য কোনও প্রতিবন্ধকতা ব্যবহার করতে না পারেন তবে এটি কী সংবেদনশীল এবং আপনার কোনও সাদা স্পেস অপসারণ করতে হবে।

//this will work
[Route("goodExample/{number:int}")]
[Route("goodExampleBool/{isQuestion:bool}")]
//this won't work
[Route("badExample/{number : int}")]
[Route("badExampleBool/{isQuestion : bool}")]

1
আপনি ভাবেন যে trim()এগুলি বিভক্ত হয়ে যাওয়ার পরে এবং একটি তুলনা করার আগে ... ছাঁটানো স্ট্রিংগুলি চাবি হিসাবে ব্যবহৃত না করা আমার ফক্সপ্রোর দিনগুলিতে ফিরে যাওয়ার মতো একটি বড় পোষা প্রাইভ।
ডিভি কে

10

রুটে ভেরিয়েবলের নাম এবং ভেরিয়েবল টাইপের মধ্যে একটি স্থান রেখে গিয়েও আমি এই ত্রুটিটি পেয়েছি:

[HttpGet]
[Route("{id: int}", Name = "GetStuff")]

এটি নিম্নলিখিত হওয়া উচিত:

[HttpGet]
[Route("{id:int}", Name = "GetStuff")]

1

আমি একটি আনডো ওয়েব এপিআই পদ্ধতির জন্য একটি এপিআই রুট ডিজাইন করেছি এবং আমি রুটে ক্রিয়াকলাপে ENUM ডেটাটাইপ বৈধতা প্রয়োগ করার চেষ্টা করেছি এবং ডিফল্টইনলাইনস্ট্রাইন রিসলভার ত্রুটির নীচে এসেছি

ত্রুটি: System.In अवैधOperationException: 'DefaultInlineConstraintResolver' টাইপের ইনলাইন সীমাবদ্ধতা নীচের ইনলাইন সীমাবদ্ধতা সমাধান করতে অক্ষম ছিল: 'অ্যাকশনইনাম'

[HttpGet]
[Route("api/orders/undo/{orderID}/action/{actiontype: OrderCorrectionActionEnum}")]
public IHttpActionResult Undo(int orderID, OrderCorrectionActionEnum actiontype)
{
    _route(undo(orderID, action);
}

public enum OrderCorrectionActionEnum
{
    [EnumMember]
    Cleared,

    [EnumMember]
    Deleted,
}

ENUM সীমাবদ্ধতা প্রয়োগ করতে, আপনাকে OrderCorrectionEnumRouteConstraintব্যবহার করে কাস্টম তৈরি করতে হবে IHttpRouteConstraint

public class OrderCorrectionEnumRouteConstraint : IHttpRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        // You can also try Enum.IsDefined, but docs say nothing as to
        // is it case sensitive or not.
        var response = Enum.GetNames(typeof(OrderCorrectionActionEnum)).Any(s = > s.ToLowerInvariant() == values[parameterName].ToString().ToLowerInvariant());
        return response;
    }

    public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, IDictionary< string, object> values, HttpRouteDirection routeDirection)
    {
        bool response = Enum.GetNames(typeof(BlockCorrectionActionEnum)).Any(s = > s.ToLowerInvariant() == values[parameterName].ToString().ToLowerInvariant());
        return response;              
    }
}

রেফারেন্স (এটি আমার ব্লগ): https://rajeevdotnet.blogspot.com/2018/08/web-api-systeminomotoperationexception.html আরও তথ্যের জন্য


0

টাইপ হিসাবে স্ট্রিং হিসাবে ঘোষণা করার সময় আমি এই ত্রুটিটি পেয়েছি। আমি যখন এটি পরিবর্তন করে এটি কাজ শুরু করে

[HttpGet][Route("testClass/master/{Type:string}")]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.