angular应用似乎正在将任何.net核心api请求重定向到站点根目录

时间:2018-07-10 14:46:58

标签: angular iis asp.net-core

我创建了一个空白的.NET Core 2.1 Web api项目,并在其中添加了Angular(版本6)客户端应用程序-所有这些都在同一项目中。所有开发工作都很好,发布时该应用程序可以“正常运行”。但是,我的问题是,当我发布到IIS时,它“似乎”发现Angular正在捕获或重定向所有应发送到.NET Core API的请求,并将它们发送回应用程序的根目录。如果我尝试访问任何API网址,那么我只会转发/重定向到主页。

因此,我的客户端应用可以在网站的根目录上访问,例如http://server/myapp/

我的.NET api都在同一站点下,但在“ api”文件夹下,例如http://server/myapp/api/

例如,如果我输入http://server/myapp/api/example/test,其中“ test”是一个有效操作,该操作返回一些JSON并且在开发中可以正常工作,那么浏览器控制台日志将给出如下错误:-

  

'错误:无法匹配任何路线。网址段:“ api / example / test”

请注意,我 使用了Microsoft Angular模板,这部分是出于我自己的教育目的,我也想使用Angular 6(当前模板适用于Angular 5)。

我已经配置了项目和应用程序,因此它与实际的Microsoft Angular模板几乎相同,并且在我发布api调用时可以正常工作。我正在努力查看我的代码和模板代码之间的差异,现在我似乎无法找到任何选项或解决方案(但是令人沮丧的是,对于另一个几乎相同代码的项目来说,这似乎不是问题,我已经陷入困境) !?!)。

帮助!

作为参考,这是我的app.module.ts:-

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent    
  ],  
  imports: [
    BrowserModule,    
    HttpClientModule,
    RouterModule.forRoot([
      {
        path: '',
        component: HomeComponent,
        pathMatch: 'full'
      },
      {
        path: 'home',
        component: HomeComponent
      }
    ])
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

还有我的“示例”控制器,我刚刚从Microsoft Angular模板中偷走了其中的一部分:-

[Route("api/[controller]")]
public class ExampleController : Controller
{        
    private static string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    [HttpGet("[action]")]
    public JsonResult Test()
    {
        return Json(Summaries);
    }
}

我正在使用客户端@@ ular / http / common上的HttpClient发出请求,但是即使我直接在浏览器URL栏中键入地址,它仍然会重定向到应用程序的根目录!?!< / p>

我确定我缺少了一些愚蠢和/或显而易见的东西,但我只是看不到...

1 个答案:

答案 0 :(得分:0)

很抱歉回答我自己的问题,但是经过数小时的尝试然后发表这篇文章之后,我发现了问题所在,可以预见的是我很笨/马虎。我最初的示例控制器具有一个向其注入DbContext的构造函数。我忽略了将此DbContext的连接字符串添加到appsettings.Production.json文件中,并且API引发了错误,但是除了我在Configure方法下的“ Startup.cs”类中添加了以下内容之外,行...

app.UseExceptionHandler("/Error");

但是我没有对此页面/路由进行任何实际的Razor页面处理,因此API不仅出错,而且还找不到指定的异常处理程序并且异常运行……其余就是历史。我的错误处理中有一个错误,哎呀...;-)

即使出现错误,现在一切都可以正常工作