Tag: asp.net web api

为什么RestSharp对两个日期进行不同的反序列化?

我有一个rest电话返回此信息(使用Chrome中的Advance Rest Client进行测试): MyObject: [22] 0: { ID: “123456” UTC1: “2013-04-19T03:12:32Z” UTC2: “2013-04-19T03:12:36.994Z” } 抓取响应并将其序列化为对象的代码如下所示: IRestResponse<List> response = client.Execute<List>(request); 当我查看响应对象时,其中一个日期是错误的。 如果我检查它或以任何方式使用对象我得到这个: UTC1: 4/19/2013 3:12 UTC2: 4/18/2013 9:12:36 PM <–CONVERTED!! 我需要将两者序列化为响应中返回的时间,而不是从UTC / GMT转换为本地时间。 如上所示,一个值保持其UTC值,而另一个值转换为我的时区。 我认为两者都是通过Convert.DateTime函数运行的,但如果我用字符串执行,则两个值都会转换为本地时间。 我意识到原始值(正在转换的那个)之一并不完全符合ISO 8601格式(精度太高); 不幸的是,这是我现在必须处理的数据。 谁能告诉我如何强制RestSharp确保两个日期都是UTC?

我必须向我的Web API REST方法添加显式线程吗?

我创建了一些将由掌上电脑/ Windows CE客户端调用的Web API REST方法。 因此,服务器可能同时受到多个(好的,更像是它,问题是多少)请求。 REST方法是否自动处理这个问题,还是我必须明确添加线程代码,以便一个客户端的请求不会干扰其他人?

为什么IIS返回空响应?

我刚刚使用文件系统发布到本地IIS应用程序发布了一个AngularJS / WebAPI项目,我可以在浏览器中打开该网站。 不幸的是,不能加载诸如图像,css等资源。 当我尝试访问位于子文件夹中的任何文件时,我仍然从服务器收到HTTP 200,但正文是空的。 我记得几年前我曾经遇到过这个问题,但我不记得为什么会这样。 请求 GET http://localhost/Content/images/common/logotype.png HTTP/1.1 Host: XX.XXX.XX.XXX Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8,sv;q=0.6 响应 HTTP/1.1 200 OK Server: Microsoft-IIS/8.5 X-Powered-By: ASP.NET Date: Tue, 25 Aug 2015 07:56:12 GMT Content-Length: […]

如何使用路由属性进行Web API版本控制时获取控制器名称

我需要从我的路由中获取控制器名称,如果在WebApiConfig中使用标准路由代码,我可以这样做。 但是,如果我使用路由属性,它会开始变得有点困难,尤其是在尝试版本时。 示例:如果我调用api / terms / bonus并且我有一个BonusController和BonusV2Controller以及一个BonusV3Controller,这段代码将返回最新的控制器版本3.那没关系,我可以接受最新版本的默认版本。 var attributedRoutesData = request.GetRouteData().GetSubRoutes(); var subRouteData = attributedRoutesData.FirstOrDefault(); var actions = (ReflectedHttpActionDescriptor[])subRouteData.Route.DataTokens[“actions”]; //This seems to get latest controller name. ie. V2 controllerName = actions[0].ControllerDescriptor.ControllerName; 现在,如果我请求版本1,为简单起见,我将使用查询字符串并调用api / terms / bonus?v = 2 所以这段代码不再有效(显然)。 如何获取V2控制器名称? 如果我放弃路由属性并只使用WebApiConfig路由,则此代码可以正常工作。 HttpControllerDescriptor controllerDescriptor = null; var controllers = GetControllerMapping(); var routeData = request.GetRouteData(); var controllerName […]

Ninject在具有多个程序集的WebApi项目中抛出Activation Exception

我的asp.net WebApi项目包含多个服务,核心和数据访问程序集。 为了在项目中使用Ninject作为我的DI容器,我从NuGet添加了Ninject.Web.Common包。 然后,我实现了IDependencyResolver: public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver { readonly IKernel kernel; public NinjectDependencyResolver(IKernel kernel) : base(kernel) { this.kernel = kernel; } public IDependencyScope BeginScope() { return new NinjectDependencyScope(this.kernel.BeginBlock()); } } public class NinjectDependencyScope : IDependencyScope { IResolutionRoot resolver; public NinjectDependencyScope(IResolutionRoot resolver) { this.resolver = resolver; } public object GetService(System.Type serviceType) { if […]

名为“DefaultRoute”的路径已在路径集合中。 路线名称必须是唯一的

当我将ASP.NET WebAPI解决方案发布到远程IIS Server ,我收到错误消息: 消息:System.ArgumentException:名为“DefaultRoute”的路由已在路径集合中。 路线名称必须是唯一的。 我看到这个线程有同样的问题,但它没有任何效果。 我试过了: 删除所有项目中的所有bin / obj文件夹。 清洗/重建 在发布之前从远程服务器上删除文件 重命名项目 无论如何,我可以找出是否存在陈旧文件。 我确实重命名了一些文件,我听说这可能会导致问题? 不确定这是否重要,但我使用ASP.NET WebApi和RestSharp进行rest调用。 这就是我的Global.asax startup拥有的:它是多余的吗? AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); RouteConfig.RegisterRoutes(RouteTable.Routes);

ASP.NET核心WebAPI 500 IIS 7.5中的内部错误

我很难让这个WebAPI工作。 好吧,使用IIS。 在IIS express中一切正常,但是当我发布它时,特别是1 api请求不起作用。 我正在尝试访问API/[Controller]/{date}/{integer}的URL。 我一直收到500服务器错误。 我的API/[Controller]/{date}其他路线有效。 这是我的API控制器: [Route(“api/[controller]”)] public class PostingsController : Controller { // GET: api/Postings/5 [HttpGet(“{date}”)] public string Get(string date) { return date; } // GET api/Postings/20160407/2 [HttpGet(“{date}/{modeID}”)] public List Get(string date, int modeID) { TruckPosting tp = new TruckPosting(); List truckPostings = tp.GetTruckPostings(date, modeID); return truckPostings; } } 原因可能是我正在尝试返回List ? […]

如何在Web API中为所有数据成员全局设置EmitDefaultValue为false?

我正在使用Web API,并且我设置了以下属性,以便在序列化成员时不显示默认值: [DataMember(EmitDefaultValue = false)] public string EventName { get; set; } 我总共有大约20个DataContracts和100个属性作为DataMembers,那么如何才能将EmitDefaultValue全局设置为false? 我希望我不必使用Reflection编写自己的逻辑!

Castle Windsor ASP.NET MVC 4和Web API相同的应用程序。 只有MVC控制器没有依赖关系?

本文是使用Castle Windsor进行Web API的一个很好的起点,但是如果我创建一个简单的MVC控制器呢? 它只有在注入没有依赖时才有效。 添加这个,即: public class HomeController : Controller { private readonly IValuesRepository repository; public HomeController(IValuesRepository repository) { this.repository = repository; } public ActionResult Index() { return View(); } } 导致以下错误: 为此对象定义的无参数构造函数 有没有办法在使用Castle Windsor的同一个应用程序中使用MVC和Web API逻辑? 在application_start设置DependencyResolver.SetResolver(…)之后,我没有注意到我的应用程序有任何改进。 如你看到的。 实现服务定位器: internal sealed class WindsorDependencyResolver : ServiceLocatorImplBase, IDependencyResolver { private readonly IWindsorContainer container; public WindsorDependencyResolver( IWindsorContainer container) […]

ASP.NET WebApi中的Fire-forget和单向调用

我完全理解HTTP世界不是单向调用的最佳选择,WebApi最适合HTTP冗长通信。 毫无疑问,WCF是这里的赢家。 但是,如果你已经有一个暴露了一堆动词的ApiController怎么办呢?在某些时候你也需要一个单向调用呢? 并且您不希望为此托管/维护另一个服务(WCF)。 Task response = client.PostAsJsonAsync(“api/log”, log) 如果您没有处理响应,那么您将获得类似于“即发即忘”的内容。 这是WebApi中的唯一方法还是另一种解决方案?