2013-11-15 48 views
1

我使用ASP.Net Web API和ASP.Net Web API Client nuget包。 当我的客户端调用API并出错时,例如API方法抛出异常, API返回带有InternalServerError状态码和消息的HTTPResponseMessage,但该消息是英文的,我怎样才能获得本消息的本地化版本?ASP.Net Web API失败响应本地化

回答

0

没有用于本地化这些消息的自动机制,但可以使用HttpResponseMessage.ResponsePhrase自行更改消息。

1

您可以使用HttpResponseMessage类的ReasonPhrase来设置来自Web Api的显式/本地化错误消息。举例来说,目前您的API方法只是抛出一个普遍的例外:

public class CustomerController : ApiController 
{ 
    public Customers Get(string id) 
    { 
     NorthwindEntities db=new NorthwindEntities(); 
     var data = from item in db.Customers 
        where item.CustomerID == id 
        select item; 
     Customer obj = data.SingleOrDefault(); 
     if (obj == null) 
     { 
      throw new Exception("CustomerID Not Found in Database!"); 
     } 
     else 
     { 
      return obj; 
     } 
    } 
    ... 
} 

调用客户端上的API方法与客户的ID是不存在的:

$.ajax({ 
    type: "GET", 
    url: '/api/Customer', 
    data: {id:$("#txtCustomerID").val()}, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (result) { 
    alert(result.CustomerID + " - " + result.CompanyName); 
    }, 
    error: function (err,type,httpStatus) { 
    alert(err.status + " - " + err.statusText + " - " + httpStatus); 
    } 
}) 

将显示相同的500错误你得到 500 Error Message

要获得本地化的和有意义的错误消息,您可以使用HttpResponseException类具有本地化的消息ReasonPhrase属性客户端:

public Customer Get(string id) 
{ 
    NorthwindEntities db=new NorthwindEntities(); 
    var data = from item in db.Customers 
       where item.CustomerID == id 
       select item; 
    Customer obj = data.SingleOrDefault(); 
    if (obj == null) 
    { 
     HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.NotFound) 
     { 
      Content = new StringContent(string.Format("No customer with ID = {0}", id)), 
      ReasonPhrase = "Localzed message CustomerID Not Found in Database!" 
     }; 
     throw new HttpResponseException(msg); 
    } 
    else 
    { 
     return obj; 
    } 
}