小编Sta*_*ish的帖子

使用Json.Net进行序列化时指定自定义DateTime格式

我正在开发一个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)

只是想知道是否还有其他一些简单的方法.

c# datetime json.net asp.net-web-api

116
推荐指数
7
解决办法
12万
查看次数

Web API路由约束HttpMethod中缺少补丁

我正在使用.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

36
推荐指数
1
解决办法
1万
查看次数

使用HttpServer或HttpSelfHostServer对Web API进行单元测试

我正在尝试为Web API项目进行一些单元测试.我要模拟web API托管环境.好像我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer).

只是想知道有什么区别,哪种技术对什么有好处,对这些选项有任何限制.

c# unit-testing self-hosting asp.net-web-api

11
推荐指数
1
解决办法
6825
查看次数

针对404/400响应的.Net Web API抛出异常/返回响应/返回错误响应?

我正在使用.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)

rest asp.net-mvc asp.net-web-api

3
推荐指数
1
解决办法
2503
查看次数

在Initialize函数中终止web api请求的执行

我正在使用.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管道仍然继续运行.

反正有没有在该函数内返回响应并停止执行?或者我必须重构现有代码以另一种方式执行此操作?

.net c# asp.net-web-api

2
推荐指数
1
解决办法
3662
查看次数

与WebRequest相比,RestSharp的性能问题

我在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# webrequest httpwebrequest restsharp

2
推荐指数
1
解决办法
5054
查看次数