asp.net بعثة التحقق المشتركة - الطريق لسلسلة أو عدد صحيح (أي / نوع / 23 أو / نوع / القبعات)

StackOverflow https://stackoverflow.com/questions/1061429

سؤال

ولدي الحالة التالية حيث كنت ترغب في قبول مساراتهم التالي

 '/type/view/23' or '/type/view/hats'

وحيث 23 هو رقم قبعات.

وحدة تحكم يبدو شيئا من هذا القبيل:

public class TypeController
{ 
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult View(int id)
    {
      ...
    }
}

والآن إذا مروا في 23 أية مشاكل. إذا كانت تمر في القبعات، ولدي بعض العمل للقيام به. الآن وأنا أتساءل في هذه الحالة سوف أترجم القبعات إلى 23 باستخدام ActionFilter التي تتطلع إلى معرفة ما إذا كانت القيمة التي تم تمريرها في مثل الرقم هو عدد صحيح (إذا تحقق ذلك أنه موجود في قاعدة البيانات) أو إذا كانت تبدو سلسلة الاحتياطي لقاعدة البيانات لما هوية من السلسلة التي تم تمريرها في غير. في كلتا الحالتين إذا لم يتم العثور على تطابق اريد توجيه المستخدم إلى عمل آخر.

أولا هو النهج وقد سميت الصحيح، وثانيا هو POSIBLE للقيام توجيه من داخل ActionFilter.

وهتاف أنتوني

هل كانت مفيدة؟

المحلول

وتغيير توقيعك لقبول سلسلة. ثم تحقق إذا كانت قيمة الرقم هو عدد صحيح. إذا كان كذلك، ثم البحث عن الهوية، إن لم يكن البحث بالاسم. إذا كنت لا تجد مباراة، ثم القيام إعادة التوجيه.

public class TypeController
{ 
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult View(string id)
    {
       Product product = null;
       int productID = -1;
       if (int.TryParse( id, out productID))
       {
           product = db.Products
                       .Where( p => p.ID == productID )
                       .SingleOrDefault();
       }
       else
       {
           product = db.Products
                       .Where( p => p.Name == id )
                       .SingleOrDefault();
       }

       if (product == null)
       {
           return RedirectToAction( "Error" );
       }
       ...
    }
}

والسبب أن أفعل ذلك هو أن من أجل معرفة ما تحكم / إجراءات لتطبيق، والإطار هو الذهاب للبحث عن واحد يطابق التوقيع على البيانات الطريق الذي اجتاز فيه. إذا لم يكن لديك توقيع يطابق - في هذه الحالة واحد أن يأخذ سلسلة - ستحصل على استثناء قبل يتم استدعاء أي من الفلاتر. للأسف، وأنا لا أعتقد أنك يمكن أن يكون واحد أن يأخذ سلسلة وآخر أن يأخذ الباحث - في هذه الحالة سوف الإطار لن تكون قادرة على معرفة أي واحد يجب أن تطابق إذا تم تمرير معلمة واحدة، على الأقل لو كان عدد، وهذا هو. من خلال جعلها معلمة سلسلة والتعامل مع الترجمة نفسك، فإنك تسمح إطار لأداء عملها وتحصل على السلوك الذي تريده - لا حاجة فلتر

نصائح أخرى

وغير متأكد يمكنك القيام بذلك. أعتقد أن كنت بحاجة لتمرير في سلسلة ثم تحقق لمعرفة ما إذا كان هو رقمية ولكن قد تكون هناك طريقة أفضل.

وأما بالنسبة لإعادة توجيه استخدام

return RedirectToAction("MyProfile", "Profile");

ويمكنك تمرير قيم الطريق كجزء من الدعوة RedirectToAction حتى تتمكن من تمرير في معرف أو أسماء الخ إذا كان هذا ما هو مطلوب.

وهناك بعضها الآخر مثل إعادة توجيه إلى الطرق التي قد تكون مفيدة أيضا من أجل ما تريد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top