توجيه السمة سلوك غريب في ApiController
-
22-12-2019 - |
سؤال
أنا أستخدم توجيه السمات لتحديد التوجيهات الخاصة بي في وحدة التحكم التي ترث من System.Web.Http.ApiController.أنا أتلقى بعض السلوكيات غير التقليدية.إليك بعض نماذج التعليمات البرمجية:
[RoutePrefix("api/1/user")]
public class UserRestController : ApiController
{
UserService userService = new UserService();
[Route("{id}"), HttpGet]
public UserDTO Get(string id)
{
var user = userService.GetUserById(id);
return user;
}
}
هذا يعمل تمامًا كما أتوقع.عندما أقوم بزيارة ~/api/1/user/someId أحصل على المعلومات المتوقعة مرة أخرى.عندما أقوم بالتبديل إلى عدم تضمين "1" في بادئة المسار، أحصل على "لم يتم العثور على مورد HTTP يطابق URI للطلب 'baseUrl/api/user/someId'."
لدي مسارات mvc ومسارات واجهة برمجة تطبيقات الويب ومسارات السمات كلها مسجلة عند بدء التطبيق في هذا المشروع ولكني أعتقد أن المسارات الافتراضية لوحدة التحكم هذه ستكون ~/userrest/...لذلك لا أعتقد أن تسجيل هؤلاء سيكون هو السبب في ذلك ولكن قد أكون مخطئًا.
عينة مما أريد:
[RoutePrefix("api/user")]
public class UserRestController : ApiController
{
UserService userService = new UserService();
[Route("{id}"), HttpGet]
public UserDTO Get(string id)
{
var user = userService.GetUserById(id);
return user;
}
}
أتوقع أن يعمل ~/api/user/someId ولكنني تلقيت الخطأ المذكور أعلاه ("لم يتم العثور على مورد HTTP يطابق URI للطلب 'baseUrl/api/user/someId'.").
خطأ كامل في ملف XML:
<Error>
<Message>
No HTTP resource was found that matches the request URI
'baseUrl/api/user/someId';.
</Message>
<MessageDetail>
No type was found that matches the controller named 'user'.
</MessageDetail>
</Error>
المحلول
استنادًا إلى وصف الخطأ، يبدو أنك قمت بتسجيل المسارات التقليدية قبل الاتصال بـ MapHttpAttributeRoutes.على سبيل المثال، قد يكون لديك طريق مثل config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"...)
.في هذه الحالة الطلب مثل api/user/someid
سيتطابق مع هذا المسار وستبحث Web API عن وحدة تحكم من النوع UserController
.تأكد من الاتصال MapHttpAttributeRoutes
قبل هذا الطريق التقليدي.
القاعدة الأساسية:يجب تسجيل مسارات أكثر تحديدًا قبل المسارات الأقل تحديدًا أو العامة.