我正在使用mvc5 Web API为xamrian中的移动应用程序提供动力,在大多数情况下,Web API调用可以100%起作用,但是今天我遇到了这样的情况:产品代码中出现了句号到Web API失败。
但是今天我有一个类似TFNT1116.5的产品代码,API调用失败。
public async Task<StockWarehouseInfoBins> GetWarehouseBinsInformaiton(string ItemCode, string WarehouseName)
{
List<StockWarehouseInfoBins> _result = new List<StockWarehouseInfoBins>();
var uri = new Uri(string.Format(BaseUrl + Constants.BinDetails + ItemCode.Trim(), string.Empty));
var response = await _client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var byteArray = await response.Content.ReadAsByteArrayAsync();
var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
_result = JsonConvert.DeserializeObject<List<StockWarehouseInfoBins>>(content);
}
return _result.FirstOrDefault();
}
我的客户端是HTTP客户端类的单例。
HttpClient _client;
我认为问题在于产品代码中的句号。
这是它在我的MVC控制器中获得的调用。
[HttpGet]
// GET: Warhouses/Details/5
public ActionResult BinDetails(string id)
{
List<StockWarehouseInfoBins> result = new List<StockWarehouseInfoBins>();
result = database.GetWarehouseDetails(id);
return Json(result, JsonRequestBehavior.AllowGet);
}
这是我的路线信息。当我在没有产品代码且没有句号的情况下测试呼叫时,它会按预期工作并返回正确的JSON数据。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
这是我在这里的课程。
public class StockWarehouseInfoBins
{
public StockWarehouseInfoBins();
public long? BinItemID { get; set; }
public string BinName { get; set; }
public long? WarehouseItemID { get; set; }
public long? WarehouseID { get; set; }
public string WarehouseName { get; set; }
public decimal ConfirmedQtyInStock { get; set; }
public decimal QuantityReserved { get; set; }
public decimal QuantityAllocatedBOM { get; set; }
public decimal QuantityAllocatedSOP { get; set; }
public decimal QuantityAllocatedStock { get; set; }
}
我在异步方法中调用上述方法。鼓励使用句号时哪个bininfo变为空。
StockWarehouseInfoBins binInfo = new StockWarehouseInfoBins();
binInfo = await restServices.GetWarehouseBinsInformaiton(lblstockCode.Text, SouceWarehouseName);
我想我需要对API调用进行URL编码,但是有没有一种方法可以在HTTP客户端上执行此操作,因此我不需要更改每个调用?