2016-02-26 61 views
0

我想讀取強類型的appsettings.json文件並將其作爲參數傳遞給控制器​​。然而它不工作。這是代碼。ASP.NET核心讀取配置IOptions控制器不觸發

appsettings.json文件:

{ 
    "AppSettings": { 
     "ApplicationName": "TestApp" 
    } 
} 

的AppSettings類:

public class AppSettings 
{ 
    public string ApplicationName { get; set; } 
} 

在啓動類注射:

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddApplicationInsightsTelemetry(Configuration); 
     services.AddMvc(); 

     services.AddOptions();    
     services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 

    } 

控制器:

public class ValuesController : Controller 
{ 
    private readonly IOptions<AppSettings> _appsettings; 


    public ValuesController(IOptions<AppSettings> appsettings) 
    { 
     _appsettings = appsettings; 
    } 

    [HttpGet] 
    public string Get() 
    { 
     return _appsettings.Options.ApplicationName; 
    } 
} 

成功得到執行的啓動程序。但是,不調用控制器構造函數或默認的get方法。

它正在工作,如果我從控制器構造函數中刪除(IOptions appsettings)。

我的代碼有什麼問題。

+0

你得到在控制檯的任何異常或錯誤?如果它沒有調用構造函數,則意味着它無法解析它,所以應該會有一些例外情況,並提供更多信息 – Tseng

+0

嗨TSeng, 感謝您的回覆。在構建和運行時我沒有發現任何錯誤。你能幫我嗎?我怎麼能找到錯誤,調試步驟? – JAK

回答

1

IOptions.Options在beta8中被重命名爲IOptions.Value。請參閱this question

return _appsettings.Options.ApplicationName; 

到:

從改變你的獲取動作

return _appsettings.Value.ApplicationName; 

應該可以解決這個問題。

UPDATE 2016年3月8日

其他的問題,我在這裏看到的是,我們在調用Get行動「默認」的行動,但在ASP.Net核心的默認路由查找控制器上的一個Index操作。

可以在Startup.cs配置路由查找默認的不是通過修改Configure功能的Index動作Get行動,將是這樣的:

app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Get}/{id?}"); 
    }); 

默認implmentation使用模板template: "{controller=Home}/{action=Index}/{id?}"這這就是爲什麼它尋找Index行動。

你的其他選擇將您的Get功能更改爲Index功能,明確當您訪問的網站(例如在URL中指定的Get行動。http://localhost/Values/Get),或在您的控制器Get法這樣規定動作的名稱:

[HttpGet] 
[ActionName("Index")] 
public string Get() 
{ 
    return _appsettings.Value.ApplicationName; 
} 
+0

問題已修復..謝謝 – JAK

相關問題