سؤال

أنا أستخدم توجيه السمات لتحديد التوجيهات الخاصة بي في وحدة التحكم التي ترث من 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 قبل هذا الطريق التقليدي.

القاعدة الأساسية:يجب تسجيل مسارات أكثر تحديدًا قبل المسارات الأقل تحديدًا أو العامة.

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