Articles of asp.net web api

从c#中的WebApi OData(EF)响应中排除属性

我正在使用C#的WebApi项目(EF代码优先),我正在使用OData。 我有一个“用户”模型,包含Id,Name,LastName,Email和Password。 在控制器例如我有这个代码: // GET: odata/Users [EnableQuery] public IQueryable GetUsers() { return db.Users; } 如果我调用/ odata / Users,我将获得所有数据:Id,Name,LastName,Email和Password。 如何从结果中排除密码,但在控制器中保持可用以进行Linq查询?

Web API路由到操作名称

我需要一个控制器来返回JSON以供JavaScript使用,所以我inheritance了ApiController类,但它的行为并不像我预期的那样。 Apress书籍Pro ASP.NET MVC 4以及我发现的大多数在线示例给出了以下示例: public class ServicesController : ApiController { public string[] MethodFruit() { return new string[] { “Apple”, “Orange”, “Banana” }; } 通过URL访问: http://mysite/services/methodfruit 但这永远不会奏效 – 找不到资源。 我可以使用的唯一方法是让控制器为每个HTTP动词包含不同的方法,然后: http://mysite/api/services 哪个调用GET方法。 我检查了Apress网站,但他们似乎没有任何论坛,目前的源代码是在VS 2012,我没有使用。 我检查了源文件,他们似乎认为前一种方法应该有效。 是不是再支持前一种方法?

使用NEST索引动态对象

我正在构建一个API应用程序,它基本上允许用户构建一个文档,该文档可以根据需要进行结构化,并存储在Elasticsearch中。 从本质上讲,我为用户提供了一个简单的界面来访问我们的Elasticsearch实例。 我试图让实现尽可能简单。 这是我到目前为止所处理的问题。 预期身体的对象: public class DocumentModel { public string Index { get; set; } public string Type { get; set; } public string Id { get; set; } [ElasticProperty(Type = FieldType.Nested)] public dynamic Document { get; set; } } 简单实施: [HttpPost] [Route(“”)] public IHttpActionResult Post(DocumentModel document) { Uri nodeLocation = new Uri(“http://localhost:9200”); IConnectionPool […]

使用WebAPI进行JSON.NET抽象/派生类反序列化2

我正在实现一个使用JSON.NET进行序列化的Web API 2服务。 当我尝试PUT(deseralize)更新的json数据时,抽象类不存在意味着它不知道如何处理它所以它什么也没做。 我也尝试使类不是抽象的,只是从它inheritance,然后每个PUT去除了基类,而不是缺少了类的属性。 例: public class People { // other attributes removed for demonstration simplicity public List People { get;set; } } public abstract class Person { public string Id {get;set;} public string Name {get;set;} } public class Employee : Person { public string Badge {get;set;} } public class Customer : Person { […]

WebApi v2 ExceptionHandler未调用

为什么永远不会调用自定义ExceptionHandler ,而是返回标准响应(不是我想要的那个)? 像这样注册 config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger()); config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler()); 并实施这样的 public class GlobalExceptionHandler : ExceptionHandler { public override void Handle(ExceptionHandlerContext context) { context.Result = new ExceptionResponse { statusCode = context.Exception is SecurityException ? HttpStatusCode.Unauthorized : HttpStatusCode.InternalServerError, message = “An internal exception occurred. We’ll take care of it.”, request = context.Request }; } } public class […]

ASP.NET MVC和Angularjs一起+ ASP.NET Web API

我想知道使用这两个世界的优点和缺点: ASP.NET MVC和Angularjs在一起(没有剃刀,Angularjs将完成这项工作)。 AngularJS(前端)+ ASP.NET Web API(后端)。 我们专注于SPA / Mini-SPA,适用于具有大量服务器端业务规则和计算的中型/大型企业项目。 我也专注于安全性。 优点和缺点意见将帮助我在脑海中找到这个问题的依据: 将ASP.NET Web API(后端),ASP.NET MVC和Angularjs一起使用是一个明智的决定吗?

从模型validation中排除类型(示例DbGeography)以避免InsufficientExecutionStackException

更新:对于tl; dr版本跳到底部 我有一个非常简单的JsonConverter子类,我正在使用Web API: public class DbGeographyJsonConverter : JsonConverter { public override bool CanConvert(Type type) { return typeof(DbGeography).IsAssignableFrom(type); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var value = (string)reader.Value; if (value.StartsWith(“POINT”, StringComparison.OrdinalIgnoreCase)) { return DbGeography.PointFromText(value, DbGeography.DefaultCoordinateSystemId); } else if (value.StartsWith(“POLYGON”, StringComparison.OrdinalIgnoreCase)) { return DbGeography.FromText(value, DbGeography.DefaultCoordinateSystemId); } else //We don’t […]

发送XML时,AspNet WebApi POST参数为null

我有一个最初使用beta位的web api服务,我已经使用候选版本位进行了重建,现在我遇到了这个问题。 我有一个POST操作,它将复杂选项作为唯一参数。 当我以json格式发送请求时,对象按预期反序列化,但如果我发送XML而不是参数为null。 在测试版中,我通过禁用模型绑定来解决这个问题,如Carlos Figueira的博客文章中描述的禁用ASP.NET Web API Beta上的模型绑定 但是在RC中,他们已经删除了此方法正在实现的IRequestContentReadPolicy。 我的行动: public List Post([FromBody]Models.AimiRequest requestValues) { try { if (requestValues == null) { var errorResponse = new HttpResponseMessage(); errorResponse.StatusCode = HttpStatusCode.NotFound; errorResponse.Content = new StringContent(“parameter ‘request’ is null”); throw new HttpResponseException(errorResponse); } var metadataParams = new List<KeyValuePair>(); foreach (Models.MetadataQueryParameter param in requestValues.Metadata) { metadataParams.Add(new KeyValuePair(param.Name, […]

使用MultipartFormDataStreamProvider和ReadAsMultipartAsync

我如何在ApiController使用MultipartFormDataStreamProvider和Request.Content.ReadAsMultipartAsync ? 我用谷歌搜索了一些教程,但是我无法使用任何一个教程,即使用.net 4.5。 这就是我目前得到的: public class TestController : ApiController { const string StoragePath = @”T:\WebApiTest”; public async void Post() { if (Request.Content.IsMimeMultipartContent()) { var streamProvider = new MultipartFormDataStreamProvider(Path.Combine(StoragePath, “Upload”)); await Request.Content.ReadAsMultipartAsync(streamProvider); foreach (MultipartFileData fileData in streamProvider.FileData) { if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName)) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, “This request is not properly formatted”)); } string fileName = fileData.Headers.ContentDisposition.FileName; […]

unit testing中的模型状态validation

我正在为这样的控制器编写unit testing: public HttpResponseMessage PostLogin(LoginModel model) { if (!ModelState.IsValid) return new HttpResponseMessage(HttpStatusCode.BadRequest); } 该模型看起来像: public class LoginModel { [Required] public string Username { set; get; } [Required] public string Password { set; get; } } 然后我有像这样的unit testing: [TestMethod] public void TestLogin_InvalidModel() { AccountController controller = CreateAccountController(); … var response = controller.PostLogin(new LoginModel() { }); Assert.AreEqual(HttpStatusCode.BadRequest, […]