Aws-lambda-dotnet: تعرض مستندات Swagger عند التكامل مع بوابة api

تم إنشاؤها على ٣٠ يناير ٢٠١٨  ·  22تعليقات  ·  مصدر: aws/aws-lambda-dotnet

اهلا ياجماعة،

لديّ واجهة برمجة تطبيقات ويب .net الأساسية تحتوي على مستندات تكامل اختيارية خاصة بها مكشوفة عبر نقطة نهاية "swagger / v1 / swagger.json". تم نشره على أنه لامدا. لقد أعددت أيضًا بوابة api التي تتكامل مع lambda للكشف عن كل واجهات برمجة التطبيقات.

المشكلة التي أواجهها هي أنني لا أستطيع الوصول إلى مستندات swagger عبر عنوان url / swagger. يتم إرجاع "message: forbibbden" دائمًا. يمكنني بالتأكيد الوصول إلى التباهي إذا قمت بتشغيل واجهة برمجة تطبيقات الويب محليًا.

أيه أفكار؟

شكرا

جايسون

guidance

التعليق الأكثر فائدة

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.

ال 22 كومينتر

هل يمكنك إنشاء مستودع تخزين بسيط لي لإلقاء نظرة عليه؟

أواجه نفس المشكلة.

هل أحرزت أي تقدم معjasondaicoder؟

نفس المشكلة ، يرجى التحديث إذا وجدت إصلاحًا. أنا قادر على الوصول إلى json مباشرة ، على سبيل المثال .. https: //...../Prod/swagger/v1/swagger.json . نظرًا لأن API Gateway يدعم التباهي ، فقد كان يفكر في شيء سحري حول مسار "التباهي". ولكن ، باستخدام المعلومات من هذه الصفحة ، http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ ، قمت بتغييرها إلى "غنيمة" ولا يزال لديه نفس المشكلة.

مثير للاهتمام ، عندما تقوم بالوصول إلى https: //.../swagger ، بشكل أساسي إزالة جزء المرحلة من المسار والعودة إلى الجذر ، مما يؤدي بعد ذلك إلى الرسالة ممنوعة.

ليس حقا يا شباب. اعتقدت أنه قد يكون ذلك بسبب أنه من المفترض أن تعمل بوابة api مع واجهة برمجة تطبيقات الويب فقط ولكن ليس لواجهة المستخدم ذات الصلة. انتهى بي الأمر باستضافة واجهة المستخدم في مكان آخر ولكن أشير إلى ملف swagger json الخاص بالمشروع من خلال بوابة api. إنها تعمل.

شكرا. حسنًا ، أشعر بالألم عند القيام بذلك :) لديّ وحدة تحكم منزلية MVC عادية وصفحة فهرس كجزء من عملية النشر الخاصة بي وهي تعمل بشكل جيد. نعم ، لقد كنت أقرأ للتو في منشور يعتقد أنه قد يكون مرتبطًا بمكان الرد الذي لم يكن فيه json ، لكن صفحة الفهرس الخاصة بي تعمل بشكل جيد.

مع الحل الذي أقدمه ، فأنت تحتاج في الواقع إلى نشر واجهة المستخدم مرة واحدة فقط. طالما قمت بتحميل ملف json من مشروعك ، فلن تحتاج إلى القيام بأي شيء بعد الآن. نستضيف ملفات واجهة المستخدم على S3. ربما يستطيع فريق AWS إصلاح المشكلة لاحقًا.

مثير للاهتمام .. يمكنك نشر .net core ui على S3 بدون تشغيل kestrel؟ برزت أن swagger كان نوعًا ما وقت تشغيل وكان ضروريًا لدعم تشغيل dlls وما إلى ذلك ، على سبيل المثال ليس مجرد مجموعة ثابتة من الملفات

normj ، المشروع مجرد c # ويبي عادي مع نقطة دخول Lamdba. لا شيء مميز حقًا. سأحاول إنشاء مستودع نموذج على GitHub لاحقًا. لا أعتقد أن هناك أي خطأ في مشروعي لأكون صادقًا لأن الآخرين يواجهون نفس المشكلة. أعتقد أنه قد يكون هناك بعض التعارضات مع مستندات التباهي المضمنة في بوابة واجهة برمجة التطبيقات.

rslangham لا ، لست بحاجة لنشر مشروعك. كل ما تحتاجه هو تنزيل ملفات swagger ui الثابتة التي يمكنك الحصول عليها من موقع swagger (ربما رابط إلى GitHub يمكنك العثور عليه على موقع swagger).

jasondaicoder شكرًا على اقتراح استخدام ملفات

أود حقًا معرفة الحل الصحيح على الرغم من :) شكرًا مرة أخرى.

مرحبًا ، لدي نفس المشكلة بالضبط ، وآمل أن يتم حلها قريبًا.

ملاحظة نفس القضية أيضا.

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.

AnandKhedkar التي عملت لي شكرا

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.

هذا يظهر صفحة Index.html. ومع ذلك ، فإنه لا يسمح بتنفيذ الخدمة من خلال واجهة swagger بالنسبة لي.
المسار الموجود في عنوان URL لطلب مكالمة GET يستبعد Prod مرة أخرى.
ومع ذلك ، فإنني أستخدم c.RoutePrefix = string.Empty; لعرض الصفحة في الجذر بدلاً من إضافة / swagger.

هل هناك خاصية يمكن تعيينها بحيث تظل متسقة عبر جميع مراجع عناوين url النسبية؟

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.

هذا يظهر صفحة Index.html. ومع ذلك ، فإنه لا يسمح بتنفيذ الخدمة من خلال واجهة swagger بالنسبة لي.
المسار الموجود في عنوان URL لطلب مكالمة GET يستبعد Prod مرة أخرى.
ومع ذلك ، فإنني أستخدم c.RoutePrefix = string.Empty; لعرض الصفحة في الجذر بدلاً من إضافة / swagger.

هل هناك خاصية يمكن تعيينها بحيث تظل متسقة عبر جميع مراجع عناوين url النسبية؟

تم الحل باستخدام هذا الحل يعمل بشكل مثالي ويظهر أيضًا المسار الأساسي في رأس صفحة التباهي.

الإغلاق كما يبدو أنه تم العثور على الحل.

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.
في أي ملف لتعريف هذا.

كنت أيضا أواجه نفس المشكلة. حصلت على حل-
يرجى التأكد من إضافة المرحلة في اسم في ملف بدء التشغيل كما هو موضح أدناه. حيث Prod هو اسمي المسرحي.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

طلب normj لإغلاق هذا.

هذا عمل معي.
شكرا

واجهتني نفس المشكلة؛ لكن HARDCODING PROD (اسم المرحلة) في الكود ليس خيارًا هل هناك أي طريقة لتحديد مرحلة نشر بوابة API التي تعمل بها lambda؟ نوع بيئة AWS أو شيء من هذا القبيل؟

grahamehorner هنا ما فعلته لحل المشكلة بدون تشفير. لقد عملت على جهازي المحلي وعلى Lambda

app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("v1/swagger.json", "GST Console API - V1");
});

ما عليك سوى إعداد نقطة النهاية باستخدام c.SwaggerEndpoint() باستخدام عنوان URL للمسار النسبي بدون "swagger" وبادئة "/".

إذا قدمنا ​​عنوان url للمسار النسبي دون أن يؤدي "/" إلى c.SwaggerEndpoint() ، فسيأتي عنوان url المطلق لنقطة النهاية من

AWS Serverless Url + "/" + c.RoutePrefix + "/" + the supplied url

حيث يتم تعيين c.RoutePrefix على "swagger" افتراضيًا

على سبيل المثال ، إذا كان عنوان URL الخاص بـ AWS Serverless هو " https://xyz.central.amazonaws.com/Prod " ، فسيكون عنوان url المطلق الخاص بك هو ' https://xyz.central.amazonaws.com/Prod/swagger/v1/swagger .json '

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات