ASP.NET核心路由可在VS IIS Express中工作,但不能在IIS 10中工作

San*_*kar 3 c# iis rest asp.net-core asp.net-core-routing

我正在开发ASP.NET Core Web API。在这种情况下,我不得不使用多个get从SQL Server DB获取数据的功能。因此,我正在做自定义属性路由。以下是我的代码

[Route("api/[controller]")]
public class MeController : Controller
{
    private readonly ITechRepository _tech;
    private readonly IPageOptions _page;
    public MeController(ITechRepository tech,IPageOptions page)
    {
        _tech = tech;
        _page = page;
    }

   [Route("getTech")]
    public IEnumerable<TechStack> Get()
    {
        return _tech.getAll();
    }
    [Route("getOptions")]
    public IEnumerable<PageControl> getOptions()
    {
        return _page.getOptions();
    }
     //GET api/values/5
    [HttpGet("{id}")]
    public int Get(int id)
    {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

以上路由在VS IIS Express中运行良好,这就是该URL

http://localhost:51889/api/me/gettech
Run Code Online (Sandbox Code Playgroud)

但是,当我在IIS 10中发布此API时getTechgetOptions由于无法正常工作,因此会产生404错误,并且[HttpGet("{id}")]在这两者中均起作用。

有人可以帮忙吗...

San*_*kar 5

终于我解决了这个问题。

问题出在SQL Server登录中。我在自己的名为aspNetCore的应用程序池中的IIS 10中配置了应用程序。其配置是

.Net CLR版本:无托管代码
托管管道模式:集成
身份:ApplicationPoolIdentity

身份引起问题。

当我将此URL称为http:// localhost:51889 / api / me / gettech时,IIS尝试使用IIS Apppool / aspNetCore的登录ID登录到SQL Server 。然后最终出现以下错误

用户“ IIS APPPOOL \ AspNetCore”的登录失败。原因:找不到与提供的名称匹配的登录名。[客户:]

我在事件日志中捕获了上述事件,其事件ID为:18456

为此,我必须为此身份创建本地用户和组。不幸的是,由于我正在使用Windows 10家庭版,因此无法执行此操作。这不允许我这样做。

我所做的是为我的应用程序池(aspNetCore)创建自定义身份。

在此处输入图片说明

在此处输入图片说明

在这里,我提供了用户名,帐户密码(已在我的用户组和SQL Server中找到)。我将dbowner这个帐户的权限授予了我的数据库。

在此处输入图片说明

但是我仍然不知道为什么它返回404错误。

无论如何,此问题现已解决。

快乐编码:)