Swagger UI未加载

时间:2019-01-09 10:23:39

标签: .net asp.net-core swagger swagger-ui swagger-2.0

Swagger UI未加载,Json正在按预期加载,但受支持的js,css文件存在问题。

you can see the issues in this images

6 个答案:

答案 0 :(得分:1)

尝试在项目内部的 vendor / swagger-api / swagger-ui 中复制/ dist目录。我不确定正确的方法,但是我遇到了同样的问题,它对我有用。另外,请尝试提供您所面临问题的更多详细信息,也许还提供代码段。 或者,尝试以下操作:

  1. 检查所有控制器方法是否都具有[http]标记。如果它们都起作用但仍然不起作用,请转到步骤2
  2. 在您的configure函数中,以确保您具有app.UseStaticFiles();如果仍然无法执行,请转到步骤3
  3. 卸载并重新安装swagger。如果不起作用,请转到步骤4(仅限核心)
  4. 如果使用的是Core,请安装Microsoft.AspNetCore.StaticFiles并在项目中引用它。

答案 1 :(得分:1)

此问题背后的原因,您需要执行以下步骤:

  1. 在Startup.cs文件下,有一个方法“ ConfigureServices”在其中执行以下操作:

    http://localhost:8080/admin/levels?page=0&size=10{&sort}
  2. 然后在同一Startup.cs文件下的Configure方法下,添加以下代码

    function example_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id){
      switch ($form_id) {
        case 'example_form':
    
          $states = [];
          $vid    = 'states';
          $terms  = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, NULL, FALSE);
          foreach ($terms as $term) {
            if ($term->depth == 0)
              $states[$term->tid] = $term->name;
          }
    
          $form['states'] = [
            '#title'      => t('States'),
            '#type'       => 'select',  
            '#options'    => $states,        
            '#required'   => TRUE,
            '#ajax' => [
              'callback'  => 'getCityList',
              'event'     => 'change',
              'wrapper'   => ['autocomplete_city_container'],
              'method'    => 'replace',
              'effect'    => 'slide',
              'progress'  => [
                'type'    => 'throbber',
                'message' => t('Fetching city...'),
              ],
            ]      
          ];
    
          $form['city_alter'] = [
            '#type'       => 'container',
            '#attributes' => ['id' => ['autocomplete_city_container']],     
          ];
          $form['city_alter']['city'] = array(
              '#title'    => t('City'),
              '#type'     => 'select',   
              '#required' => TRUE,
              '#options'  => [],                
            );
          if (!empty($form_state->getValue('states'))) {
            $cities   = [];
            $stateTid = $form_state->getValue('states');
            $vid      = 'city';
            $terms    = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $stateTid, NULL, FALSE);
            foreach ($terms as $term) {                
                $cities[$term->tid] = $term->name;
            }
    
            $form['city_alter']['city'] = array(
              '#title'    => t('Size'),
              '#type'     => 'select', 
              '#required' => TRUE,
              '#options'  => $cities,                
            );
          }
        break;
      }
    }
    function getCityList(array &$form, FormStateInterface $form_state) {  
      return $form['city_alter'];
    }
    

    谢谢。

答案 2 :(得分:0)

您是否在启动时启用了StaticFiles?

app.UseStaticFiles();

答案 3 :(得分:0)

我遇到了同样的问题:Swagger在本地工作得很好,但是一旦发布到IIS,就不会显示UI。通过添加IIS的请求筛选功能所允许的.js.json文件来解决此问题。默认情况下,新创建的网站未在其中列出这些文件。

答案 4 :(得分:0)

尝试删除.vs文件夹,Visual Studio在构建项目时会自动再次创建它。 Swagger Page删除后即可工作。

根据泰勒·芬德利的答案。 https://stackoverflow.com/a/50629590/9705947

答案 5 :(得分:0)

我一直在关注 msdoc 上的原始 guide 试图启用 swagger 支持,在使用 RoutePrefix 添加此块后,我没有意识到路径从 http://localhost:<port>/swagger 更改为http://localhost:<port>,感谢 Sampat 指出。

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = string.Empty; // this changes the default path
});