我正在开发一个API来使用ASP.NET Web API公开一些数据.
在其中一个API中,客户希望我们以yyyy-MM-dd格式显示日期.我不想更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端.我在多个客户的解决方案中进行开发.
我能想到的解决方案之一是创建一个自定义JsonConverter,然后将其放入我需要进行自定义格式化的属性
例如
class ReturnObjectA
{
[JsonConverter(typeof(CustomDateTimeConverter))]
public DateTime ReturnDate { get;set;}
}
Run Code Online (Sandbox Code Playgroud)
只是想知道是否还有其他一些简单的方法.
我正在使用.net Web API V1构建一些restful api.
我们正在尝试为web api定义一些路由.我在定义'Put'和'patch'的路线时遇到了一些问题.
它们具有相同的URL,唯一不同的是HttpMethod.在HttpMethod中,没有对Patch的支持http://msdn.microsoft.com/en-us/library/system.net.http.httpmethod(v=vs.118).aspx
config.Routes.MapHttpRoute(
"UpdateCustomer",
"api/customers/id/{id}",
new {controller = "Customers", action = "UpdateCustomer"},
new {id = @"\d+", httpMethod = new HttpMethodConstraint(HttpMethod.Put)}
);
config.Routes.MapHttpRoute(
"PatchCustomer",
"api/customers/id/{id}",
new {controller = "Customers", action = "PatchCustomer"},
new {id = @"\d+", httpMethod = new HttpMethodConstraint(HttpMethod.**Patch**)}
);
Run Code Online (Sandbox Code Playgroud) .net rest asp.net-mvc asp.net-web-api asp.net-web-api-routing
我正在尝试为Web API项目进行一些单元测试.我要模拟web API托管环境.好像我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer).
只是想知道有什么区别,哪种技术对什么有好处,对这些选项有任何限制.
我正在使用.net web api开发一些宁静的Web服务.
在某些情况下,我需要向客户端返回404(NotFoundStatus)或400(BadRequest).
看起来在框架中有很多方法可以做到这一点.下面列出了我所知道的一些方法.
是否有任何指导方针选择使用哪一个来回复这些回复?
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Error");
return Request.CreateResponse(HttpStatusCode.NotFound, "Error");
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent("Error") });
Run Code Online (Sandbox Code Playgroud) 我正在使用.net web api中的一些Restful API.我正在处理的所有API控制器都从基本API控制器继承.它在Initialize函数中有一些逻辑.
protected override void Initialize(HttpControllerContext controllerContext)
{
// some logic
}
Run Code Online (Sandbox Code Playgroud)
有一个新的产品需求,我想根据一些标准在Initialize函数中返回客户端的响应.例如
protected override void Initialize(HttpControllerContext controllerContext)
{
// some logic
controllerContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "error");
}
Run Code Online (Sandbox Code Playgroud)
然而,即使我已经返回响应,似乎.net管道仍然继续运行.
反正有没有在该函数内返回响应并停止执行?或者我必须重构现有代码以另一种方式执行此操作?
我在restsharp客户端中发现了一些性能问题,我在函数PerformanceRequest2中使用RestSharp向一些非常好的API发送请求,并在PerformRequest中使用WebRequest使用普通的.net请求
PerformRequest的平均响应时间是75毫秒,而使用RestSharp的PerformRequest2是300毫秒.这是restsharp的一些限制,还是我们使用restsharp的方式做错了
private static void PerformRequest2(string requestData)
{
var request = JsonConvert.DeserializeObject<ComplexClass>(requestData);
var client2 = new RestClient("URL");
var restRequest = new RestRequest();
restRequest.Method = Method.PUT;
restRequest.AddHeader("Content-Type", "application/json");
restRequest.AddHeader("Authorization", string.Format("Bearer {0}", token));
restRequest.AddJsonBody(request);
var restResponse2 = client2.Execute(restRequest);
if (restResponse2.StatusCode != HttpStatusCode.OK)
{
throw new Exception("error");
}
}
private static void PerformRequest(string requestData)
{
var request = JsonConvert.DeserializeObject<ComplexClass>(requestData);
var webRequest =
WebRequest.Create("URL");
webRequest.ContentType = "application/json";
webRequest.Method = "PUT";
webRequest.Headers.Add(HttpRequestHeader.Authorization, string.Format("Bearer {0}", token));
using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
{
streamWriter.Write(JsonConvert.SerializeObject(request));
streamWriter.Flush();
} …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×2
asp.net-mvc ×2
rest ×2
datetime ×1
json.net ×1
restsharp ×1
self-hosting ×1
unit-testing ×1
webrequest ×1