Tag: asp.net web api

ASP.NET Core Web API:程序不包含适用于入口点的静态“Main”方法

我正在开发一个ASP.NET Core Web API,它引用了大型解决方案中的其他项目(csproj)。 ASP.NET Core Web API在Visual Studio 2015中构建,并在“在我的机器上”命令提示符中使用msbuild 🙂 msbuild SomeWebAPI.xproj Compilation succeeded. 33 Warning(s) 0 Error(s) Time elapsed 00:00:01.7740626 Done Building Project . . Build succeeded. 问题是它不构建在我们的构建服务器上。 相同的msbuild-command,相同的msbuild-version,结果不同: msbuild SomeWebAPI.xproj error CS5001: Program does not contain a static ‘Main’ method suitable for an entry point [D:\TeamCity\buildAgent\work\8120f5584932b96b\S SomeWebAPI\SomeWebAPI.xproj] Compilation failed. 0 Warning(s) 1 […]

使用Castle Windsor在WebAPI中进行dependency injection

我想使用Castle Windsor在WebApi应用程序中实现dependency injection。 我有以下示例代码 – 界面 – public interface IWatch { { DateTime GetTime(); } } 以下Watch类实现了IWatch接口 – public class Watch:IWatch { public DateTime GetTime() { return DateTime.Now; } } WebApi控制器 – WatchController如下 – public class WatchController : ApiController { private readonly IWatch _watch; public WatchController() { _watch = new Watch(); } //http://localhost:48036/api/Watch public string […]

在ASP.NET Web Api中使用“ExceptionHandler”需要一个完整的示例来处理未处理的exception?

我查看了这个链接http://www.asp.net/web-api/overview/web-api-routing-and-actions/web-api-global-error-handling 。 在这个链接中他们提到了这样的 class OopsExceptionHandler : ExceptionHandler { public override void HandleCore(ExceptionHandlerContext context) { context.Result = new TextPlainErrorResult { Request = context.ExceptionContext.Request, Content = “Oops! Sorry! Something went wrong.” + “Please contact support@contoso.com so we can try to fix it.” }; } private class TextPlainErrorResult : IHttpActionResult { public HttpRequestMessage Request { get; set; } […]

如何从SQL查询返回动态对象

我有一个storeprocdure返回集合的情况,但我没有如何对象结构,因为查询是非常动态的。 一个查询可以返回: Id | 位置| MarketSegment | …… n列 而另一个可以回来 Id | 销售代表| 位置| 地区| …… n列 我只是简单地返回一个“对象”,如下面的代码所示。 我知道这不会起作用,但是如何设置它呢? using (DbContext db = new Context()) { var items = db.Database.SqlQuery( “SP @Param1, @Param2”, new SqlParameter(“Param1”, ped), new SqlParameter(“Param2”, 25) ).ToList(); return Request.CreateResponse<List>(HttpStatusCode.OK, items); } 编辑: 我不知道无论如何显示SP都会有所帮助,除非我能解释得更多。 每列都表示为自定义字段。 用户可以创建n个自定义字段。 因此,如果您为User1运行SP并且他有5个自定义字段,则每个自定义字段将在列中表示,但如果User2有3个自定义字段,则只表示3列。 我无法控制的是自定义字段名称和自定义字段数。

如何防止单个对象属性在字符串时转换为DateTime

这是我必须使用的模型的简化版本: class InputModel { public string Name { get; set; } public object Value { get; set; } } 以及控制器的相关部分: class Controller : ApiController { [HttpPut] public async Task Update([FromBody]InputModel model) { //implementation } } InputModel类的Value属性可以是任何类型,它将在以后知道的类型中,在模型发送到的一段遗留代码中,我无法控制。 我在请求正文中使用以下json发生的问题: { “name”: “X”, “value”: “2001-10-17T13:55:11.123” } 默认行为是解析此json,以便将Value属性转换为DateTime。 但是,DateTimes的处理方式与遗留代码中的字符串截然不同,并且在处理后数据会丢失(例如:在持久保存到数据库时删除毫秒部分)。 因此,当稍后请求相同的值时,返回的值为“2001-10-17T13:55:11”(缺少毫秒)。 当然我可以通过在我的web api配置中全局设置来解决这个问题: httpConfiguration.Formatters.JsonFormatter.SerializationSettings.DateParseHandling = DateParseHandling.None; 但这样做也会禁用解析DateTimes以用于其他方法和控制器中的模型,这些方法和控制器具有需要默认行为的模型。 我正在寻找的是类似下面的(想象的)代码: class InputModel […]

设置JsonConvert.DefaultSettings asp net core 2.0不能按预期工作

我在Startup.cs中有以下代码,并期望它覆盖默认的序列化选项。 我希望它覆盖我的asp net core 2.0项目中的每一个序列化,但是动作返回值不正确,我认为这个全局属性在core 2.0中不起作用 我把它写在app.UseMvc()之前的配置中; JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.Indented, TypeNameHandling = TypeNameHandling.Objects, ContractResolver = new CamelCasePropertyNamesContractResolver(), Converters = new List { new StringEnumConverter() } };

在路由匹配发生之前拦截所有WebApi调用

我正在寻找一种方法来拦截/获取在匹配路由之前所做的请求。 例如,我有多个控制器和路由设置,但我想要一些机制,在路由方法被命中之前将被击中。 如果这种机制能够获得发送的路径参数,那将是非常可取的。 我一直无法找到类似于我正在寻找的东西(但可能不熟悉Web API我用错误的关键字搜索)。

改变facebook redirect_uri web api

我想知道是否有人可以帮助我或指出我正确的方向。 我在我的web api 2项目中设置了facebook社交登录,它运行正常。 但是,当我将其部署到生产环境时,我发现redirect_uri显示的是HTTP而不是HTTPS,这会导致服务崩溃。 我想知道的是首先是如何构造redirect_uri以及是否有任何更新方法。 发生这种情况的全部原因是因为我们的负载均衡器。 该站点在HTTP协议下运行,但负载均衡器接受HTTPS流量并将其重定向到HTTP。 不幸的是,我无法更新Loadbalancer,因此需要找到一种解决方法。 我试图拦截ApplyRedirect方法中的IFacebookAuthenticationProvider ,这成功地允许我将redirect_uri从HTTP更改为HTTPS。 然而,当我这样做时,一旦我登录Facebook并且不知道为什么会发生这种情况,我会得到access_denied的错误。 有人可以帮我实现吗? 我可以明确地将facebook设置的redirect_uri和cookie标记为HTTPS吗? 这是我的Facebook提供者类 public class FacebookAuthProvider : IFacebookAuthenticationProvider { public void ApplyRedirect(FacebookApplyRedirectContext context) { string redirect_uri = context.RedirectUri; redirect_uri = redirect_uri.Replace(“redirect_uri=http”, “redirect_uri=https”); context.Response.Redirect(redirect_uri); } public Task Authenticated(FacebookAuthenticatedContext context) { context.Identity.AddClaim(new Claim(“ExternalAccessToken”, context.AccessToken)); return Task.FromResult(null); } public Task ReturnEndpoint(FacebookReturnEndpointContext context) { return Task.FromResult(null); } […]

Web API – 动态到XML序列化

我正在编写一个Web API Web服务,它返回动态构造的属性包。 是否有任何有效的序列化程序或如何将动态序列化为XML? 我试图寻找任何好的建议,但没有找到任何可用的东西。

WebAPI上传错误。 MIME多部分流的预期结束。 MIME多部分消息未完成

作为MVC4的WebAPI的一部分,我一直在关注本教程以支持文件上传: http : //blogs.msdn.com/b/henrikn/archive/2012/03/01/file-upload-and-asp-net-web -api.aspx 。 当我的控制器收到请求时,它会抱怨“MIME多部分消息未完成”。 有没有人有关于如何调试这个的任何提示? 我已经尝试将流的位置重置为0,因为在它遇到处理程序之前还有其他东西在读取它之前。 我的HTML看起来像这样: Select file(s) to upload : 和我的控制器的Post方法如下: public Task<IEnumerable> Post() { if (Request.Content.IsMimeMultipartContent()) { Stream reqStream = Request.Content.ReadAsStreamAsync().Result; if (reqStream.CanSeek) { reqStream.Position = 0; } string fullPath = HttpContext.Current.Server.MapPath(“~/App_Data”); var streamProvider = new MultipartFormDataStreamProvider(fullPath); var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t => { if (t.IsFaulted || t.IsCanceled) Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); […]