Tag: asp.net web api

从对象类型System.Data.Spatial.DbGeography到已知的托管提供程序本机类型不存在映射

我正在使用DotNetNuke 7平台构建应用程序,并尝试将地理数据写入数据库。 以下是该项目的一些背景知识。 我在VS 2012中构建,刚刚从2008 R2升级到Server 2012。 DotNetNuke 7为数据层和WebAPI实现了PetaPoco。 我希望我提供的信息足以让我们了解问题。 我的代码在“rep.Insert(location);”行上失败了 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.Web; using System.Net.Http; using System.Web.Http; using System.Data.Spatial; using DotNetNuke.Web.Api; using DotNetNuke.Data; namespace DotNetNuke.Modules.GeoLocations { public class LocationController: DnnApiController { [AllowAnonymous] [HttpPost] [ValidateAntiForgeryToken] public HttpResponseMessage addLocation(CP_Location submitted) { submitted.GeoCode = DbGeography.PointFromText(string.Format(“POINT({0} {1})”, submitted.Long, submitted.Lat), […]

将属性与用户的电子邮件一起使用

我已经看到[Authorize]属性采用了这样的AuthorizeAttribute.User属性[Authorize(“User=Alice, Bob”)] (其中Alice / Bob是用户名,我猜?)。 但是,在我的应用程序中,我注册的是用户的电子邮件地址。 [Authorize(“User=…”)]采取其他属性? 是否可以接收电子邮件(并且[Authorize(“User=alice@example.org, bob@example.org”)] ?毫不奇怪, MSDN页面不是很有帮助。 这是内置的这个function,还是我必须实现自己的自定义Authorize属性? 在上面链接的非常简短的MSDN页面上,Authorize属性上是否有完整参数列表的文档?

如果API速率限制超过使用WebApiThrottle – C#Web API,则阻止API请求5分钟

在Web API中有一个非常好的库WebApiThrottle用于API速率限制。 如Wiki页面上所述,我可以根据API调用的授权令牌头来限制API。 但是,如果此api速率限制超过,我怎样才能阻止接下来5分钟的api呼叫? 此外,并非在接下来的5分钟内任何请求都会重置超出限速的时间。 我检查了代码,但找不到此function。 如果有人可以提出建议吗?

在WebApi后端加密Json结果

我用数据描述完成了我的web api,但现在,我必须编写Json结果。 当我在浏览器上放置查询字符串时,现在我有了答案(示例): [{ “SUSPID”: “111”, “IVNOME”: “睾丸中”, “IVMAE”: “睾丸中”, “IVPAI”: “睾丸中”, “IVDATANASC”: “1970年2月7日”, “IVRG”: “0000(IFP)”,“ICPF”:“NãoCadastrado”}] 我无法certificate这一点……我必须表现出(加密):[{“SUSPID”:“AUAUAUA”,“IVNOME”:“UAUAU”,“IVMAE”:“UAUAU”,……] 我看到一些例子,但我找不到一个我需要的东西 我服务的部分代码(Cliente-side): var response = await client.GetAsync(urllink); var JsonResult = response.Content.ReadAsStringAsync().Result; if (typeof(T) == typeof(string)) return null; var rootobject = JsonConvert.DeserializeObject(JsonResult); return rootobject; 在我的控制器(web api BackEnd)中,我返回此数据集: return lretorno.Tables[0].AsEnumerable().Select(row => new Envolvido { SUSPID = Convert.ToString(row[“SUSPID”]), IVNOME = Convert.ToString(row[“SUSPNOME”]), […]

C# – OData:无法使用带有’new’属性的Type构建System.Web.Http.OData.Delta

我在ASP.NET Web API 2(而不是Core)中运行一个项目,我有一个像这样的对象: public class Desktop : EntityData { public Desktop() { } public new Guid Id { get { return Guid.Parse(base.Id); } set { base.Id = value.ToString(); } } … } public abstract class EntityData { protected EntityData(); public string Id { get; set; } public bool Deleted { get; set; } } […]

如何将Stream转换为对象

如何将Stream转换为Object。 我有一个WebApi [HttpGet] public AttachmentViewModel DownloadAttachementDetailsByIds(int attachementDetaisId) { AttachmentViewModel attachment = new AttachmentViewModel { AttachmentName = “Observe”, AttachmentType = “.c”, AttachmentDetailsID = 123, AttachmentDetails = Encoding.ASCII.GetBytes(“some contant”), AttachmentSize = 12 //some valid size }; return attachment; } 现在我把这个GET方法调用如下: WebClient webClient = new WebClient(); Stream stream = webClient.OpenRead(documentRepositoryApiUrl + “DocRepoApi/DownloadAttachementDetailsById?attachementDetaisId=97”); 好吧,我的调用成功但是一旦我将所有数据都输入到我的流中,我怎样才能再次将它们全部检索为相同的AttachmentViewModel对象。 如果API返回任何错误如何阅读它。

C#WebAPI序列化字符串列表

这应该是一个相对简单的问题,我在网上暂时待了一段时间,仍然无法找到解决方案。 现在我的webapi返回这样的输出 Japanese Korean French 我希望它像这样回归 Japanese Korean French 完成这项任务的最简单方法是什么? 所以基本上我有两件事要做 1)摆脱命名空间xmlns:d3p1 =“http://schemas.microsoft.com/2003/10/Serialization/Arrays”2)更改outter元素的名称 至 3)更改内部元素的名称 至 我在Merchant类中的数据库是这样的 [DataMember(EmitDefaultValue = false)] public List WebCuisine { get; set; } 谢谢你在advnace

捕获WebAPI方法调用的响应大小(以字节为单位)

有没有办法在WebAPI中执行此操作而不重新发明轮子? 我可以很容易地获得通过WebAPI返回的对象的大小,但当然有标题和序列化开销。 由于我们按带宽利用率收费,我想知道我们的响应有多大,但似乎没有明显的机制。 编辑要清楚,我正在寻找一种以编程方式执行此操作的方法,以便我可以报告,分析和预测使用情况,因此我不会对账单感到惊讶。

使用WebAPI HttpResponseMessage时下载文件提示

我的API中有一个返回HttpResponseMessage的方法: [HttpGet, HoodPeekAuthFilter] public HttpResponseMessage GlobalOverview() { try { StatsRepo _statsRepo = new StatsRepo(); string file = _statsRepo.IncidentData().AsCSVString(); if (file == null) { return Request.CreateResponse(HttpStatusCode.NoContent); } HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StringContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue(“application/octet-stream”); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(“attachment”); result.Content.Headers.ContentDisposition.FileName = “GlobalOverview.csv”; return result; } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError); […]

Autofac:如何加载引用但未直接使用的程序集

我们使用Autofac for DI创建了一个WebApi解决方案。 我们将autofac的引导分解为一个单独的项目。 这样,我们的WebApi项目仅引用我们的Bootstrap和Contracts项目。 然后我们的引导程序引用所有其他程序集并将所有内容连接在一起。 我喜欢这种设计用于分离关注点。 我们可以按如下方式手动加载我们的程序集 – 其中我们的“AutofacModule”类包含注册每个模块(程序集)的必要信息。 ContainerBuilder builder = new Autofac.ContainerBuilder(); builder.RegisterModule(new Business.AutofacModule()); builder.RegisterModule(new Data.AutofacModule()); builder.RegisterModule(new Services.AutofacModule()); etc… 这有效,但需要对每个程序集进行硬编码。 我们试图使这个动态化,以便我们可以循环遍历所有引用的程序集,如下所示。 var assemblies = BuildManager.GetReferencedAssemblies().Cast(); foreach (var assembly in assemblies) { builder.RegisterAssemblyModules(assembly); } 这应该有效,但不行。 问题是.Net确定在引导程序项目中实际上没有使用各种程序集而不加载它们(试图优化?)。 所以我们的一些程序集从未加载过。 我还尝试了以下循环bin目录来查找所有程序集。 但是,在编译期间,.Net不会将未引用的程序集移动到bin目录中,因此它们也不存在。 string assemblyPath = System.IO.Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory, “bin”); var allAssemblies = new List(); foreach (string dll […]