2017-03-25 90 views
1

我正在開發ASP.NET Core web API。在這裏我有一種情況,就像我必須使用從SQL服務器數據庫獲取數據的多個get函數。爲此,我正在做自定義屬性路線。下面是我的代碼ASP.NET核心路由工作在VS IIS Express中,但不在IIS 10中

[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; 
    } 
} 

上述路線以及在VS IIS表達的作品,這是URL

http://localhost:51889/api/me/gettech 

但是當我發佈在IIS 10. getTechgetOptions這個API不工作它產生了404錯誤,並且[HttpGet("{id}")]正在同時工作。

任何人可以幫助這個...

+0

plz提供更多信息,你會得到什麼樣的錯誤?哪個http響應代碼?順便說一句。我想定義的HttpMethod,而不是使用慣例的配置方法... 進一步我不熟悉.NET的核心Web API,但我想知道你爲什麼從COntroller而不是從ApiController繼承。 事實上,我猜想這不是worling,只是因爲你使用小寫方法名稱 – DotNetDev

+0

@DotNetDev謝謝你的評論。在asp.net核心中沒有apiController類。 – Sankar

+0

任何人都可以在此幫忙 – Sankar

回答

3

最後我得到的問題解決。

問題出在SQL服務器的登錄。我在我自己的應用程序池IIS10中配置我的應用程序,名爲aspNetCore。它的配置是

.NET CLR版本:無託管代碼
管理的流水線模式:Integerated
身份:ApplicationPoolIdentity

身份導致的問題。

當我打電話給這個URL http://localhost:51889/api/me/gettech IIS嘗試登錄到登錄ID爲IIS Apppool/aspNetCore的SQL Server。然後結束以下錯誤

用戶'IIS APPPOOL \ AspNetCore'登錄失敗。原因:找不到 與提供的名稱匹配的登錄信息。[客戶端:]

我捕獲在事件日誌與事件ID上述問題的方法:18456

爲此,我必須創建該標識本地用戶和組。不幸的是,我無法做到這一點,因爲我使用Windows 10家庭版。這不允許我這樣做。

我所做的是爲我的應用程序池(aspNetCore)創建自定義標識。

enter image description here

enter image description here

在那裏,我給了用戶名,這已經是在我的用戶羣,以及SQL服務器發現該帳戶的密碼。我給我的分貝給這個帳戶dbowner權利。

enter image description here

但我仍然不知道爲什麼它返回404錯誤。

無論如何,這個問題現在已經修復。

快樂編碼:)

2

對於Web API使用Http{Verb}屬性與路徑模板的控制器操作中提到documentation

提示:
當構建一個REST API ,您很難在操作方法上使用 [Route(...)]。最好使用更具體的 [http 動詞屬性]準確地說明您的API支持的內容。 希望REST API的客戶知道映射到特定邏輯操作的路徑和HTTP動詞 。

例如...

[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; 
    } 

    //GET api/me/tech 
    [HttpGet("tech")] 
    public IEnumerable<TechStack> Get() { 
     return _tech.getAll(); 
    } 

    //GET api/me/options 
    [HttpGet("options")] 
    public IEnumerable<PageControl> getOptions() { 
     return _page.getOptions(); 
    } 

    //GET api/me/5 
    [HttpGet("{id:int}")] 
    public int Get(int id) { 
     return id; 
    } 
} 
+0

謝謝你的迴應...但它仍然不工作......同樣的行爲。這是我的網址 - http:// localhost/testApi/api/me/tech這不起作用 – Sankar

+0

正如我所說的,http:// localhost:51889/api/me/tech這個IIS Express網址工作正常。 – Sankar

+0

感謝您的回答。我已經解決了這個問題。 – Sankar

相關問題