首先不要將您的數據源放到wwwroot
文件夾中,因爲它是公開的。看看official docs:
您的應用程序的Web根目錄是像CSS,JS和圖像文件公開, 靜態資源在你的項目目錄。靜態文件 中間件默認情況下只會提供Web根目錄(和 子目錄)中的文件。
所以移動Countries
文件夾在您的項目的根文件夾中。
要讀取xml數據,您可以使用XmlSerializer
。我會盡量展示如何讀取XML文件:
首先,我假定你有XML內容象下面這樣:
<?xml version="1.0" encoding="UTF-8" ?>
<Container>
<Countries>
<Country>
<Code>Code1</Code>
<Title>Title1</Title>
</Country>
<Country>
<Code>Code2</Code>
<Title>Title2</Title>
</Country>
</Countries>
</Container>
首先描述類型
public class Country
{
public string Code { get; set; }
public string Title { get; set; }
}
public class Container
{
public Country[] Countries { get; set; }
}
之後創建XML序列化服務:
public interface ICountryService
{
Country[] GetCountries();
}
public class CountryService : ICountryService
{
private readonly IHostingEnvironment _env;
public CountryService(IHostingEnvironment env)
{
_env = env;
}
public Country[] GetCountries()
{
XmlSerializer ser = new XmlSerializer(typeof(Container));
FileStream myFileStream = new FileStream(_env.ContentRootPath + "\\Countries\\en-GB.xml", FileMode.Open);
return ((Container)ser.Deserialize(myFileStream)).Countries;
}
}
然後註冊服務在ConfigureServices
方法:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddSingleton<ICountryService, CountryService>();
}
最後注入和在任何地方使用它(如控制器)
public class SomeController : Controller
{
public SomeController(ICountryService countryService)
{
// use it
}
}
真正偉大的,詳細的解答。您的解決方案工作完美我花了幾次嘗試去理解爲什麼出現錯誤,但是這是因爲我的xml數據結構,但現在很明顯。我非常感謝你的時間提供全面的答案。 – RobHurd
如果您不使用早期版本的asp.net中的屬性,這是一個很好的答案。我使用屬性將屬性映射到數據成員。我如何在覈心中完成這項工作? – phitch