Asp.net mvc Web Api-本地化属性值
斯莫代尔: 控制器:Asp.net mvc Web Api-本地化属性值,asp.net-mvc,asp.net-web-api,json.net,Asp.net Mvc,Asp.net Web Api,Json.net,斯莫代尔: 控制器: public class Product { public string NameEN { get; set; } public string NameFR { get; set; } public double Price { get; set; } } 我想要这个结果: // GET: api/Products/5 [ResponseType(typeof(Product))] public IHttpActionRes
public class Product
{
public string NameEN { get; set; }
public string NameFR { get; set; }
public double Price { get; set; }
}
我想要这个结果:
// GET: api/Products/5
[ResponseType(typeof(Product))]
public IHttpActionResult GetProduct(int id)
{
return Ok(new Product(){NameEN = "Cookie", NameFR = "Biscuit", Price = 10});
}
产品存储在数据库中
在使用所需的Accept语言进行序列化期间,如何将属性NameEN和NameFR转换为Name
谢谢您可以使用资源文件创建和访问特定于区域性的字符串 首先创建一个资源文件,并根据区域性代码将其命名。因此,对于默认值,您将使用
Names.resx
,对于法语,您将使用Names.fr-fr.resx
。从这里,您应该打开每个resx文件的属性,并为其提供类似的自定义工具名称空间,例如ViewRes
。现在,当您访问resx文件以获取如下字符串:ViewRes.Names.MyString
时,您将根据您可以设置的Thread.CurrentThread.CurrentCulture
中定义的当前区域性获取字符串。您可以使用Global.asax.cs文件中的accept语言进行设置,如下所示:
{"Name" = "Cookie", "Price" = "10"}
现在,下次在控制器中访问ViewRes.Names
时,将使用accept language设置的区域性
您还可以在访问resx字符串时设置区域性,如下所示:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
string culture = HttpContext.Request.ServerVariables.Get("HTTP_ACCEPT_LANGUAGE");
CultureInfo ci = culture as CultureInfo;
if (ci == null)
ci = new CultureInfo("en");
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
}
它无法工作,因为产品存储在数据库中。产品示例:1。饼干,饼干,1.99美元2块。汽车,汽车,4999美元我的产品是动态的。我不能使用resx来存储我的值。@jonlabr那么你需要应用你自己的逻辑。捕获并解析accept语言值,并相应地显示name值。看,我不敢相信这个功能不包括:(谢谢!
[ResponseType(typeof(Product))]
public IHttpActionResult GetProduct(int id, string culture)
{
ViewRes.Names.Culture = new CultureInfo(culture);
return Ok(new Product(){Name = ViewRes.Names.MyString, Price = 10});
}