Questions tagged «asp.net-web-api»

ASP.NET Web API是用于为客户端(如浏览器和移动设备)构建HTTP服务的框架。它基于Microsoft .NET Framework,是构建RESTful服务的理想选择。

15
检测到自引用循环-将数据从WebApi取回浏览器
我正在使用Entity Framework,并且在将父数据和子数据获取到浏览器时遇到问题。这是我的课程: public class Question { public int QuestionId { get; set; } public string Title { get; set; } public virtual ICollection<Answer> Answers { get; set; } } public class Answer { public int AnswerId { get; set; } public string Text { get; set; } public int QuestionId …

11
实体框架在运行时更改连接
我有一个引用我的模型和DAL程序集的Web API项目。向用户显示一个登录屏幕,他可以在其中选择不同的数据库。 我建立连接字符串如下: public void Connect(Database database) { //Build an SQL connection string SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() { DataSource = database.Server, InitialCatalog = database.Catalog, UserID = database.Username, Password = database.Password, }; //Build an entity framework connection string EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() { Provider = database.Provider, Metadata = Settings.Default.Metadata, …

4
OWIN安全性-如何实施OAuth2刷新令牌
我正在使用Visual Studio 2013随附的Web Api 2模板,该模板具有一些OWIN中间件来进行用户身份验证等。 在OAuthAuthorizationServerOptionsI中,我注意到OAuth2服务器已设置为发放在14天内到期的令牌 OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/api/token"), Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) , AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; 这不适合我的最新项目。我想分发短暂的bearer_tokens,可以使用refresh_token 我已经进行了大量谷歌搜索,找不到任何有用的信息。 这就是我设法取得的成就。我现在已经达到“现在就做WTF”这一点。 我写了一个根据类的属性RefreshTokenProvider实现的:IAuthenticationTokenProviderRefreshTokenProviderOAuthAuthorizationServerOptions public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider { private static ConcurrentDictionary<string, AuthenticationTicket> _refreshTokens = new ConcurrentDictionary<string, AuthenticationTicket>(); …

11
如何在ASP.NET MVC / WebAPI应用程序中支持HTTP OPTIONS动词
我已经从MVC 4 / Web API模板开始设置了ASP.NET Web应用程序。似乎一切运行得很好-没有我知道的问题。我已经使用Chrome和Firefox浏览了该网站。我已经使用Fiddler进行了测试,所有的响应似乎都可以赚钱。 因此,现在我继续编写一个简单的Test.aspx来使用此新的Web API。脚本的相关部分: <script type="text/javascript"> $(function () { $.ajax({ url: "http://mywebapidomain.com/api/user", type: "GET", contentType: "json", success: function (data) { $.each(data, function (index, item) { .... }); } ); }, failure: function (result) { alert(result.d); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("An error occurred, please …

6
swagger-ui部署后返回500
开箱即用的配置可以在我的机器上完美运行,完全没有问题。 但是当我部署到我们的测试环境时,我收到以下消息 500:{“消息”:“发生错误。” } / api / swagger / docs / v1 部署是为了 default web site/api 我想它与baseUrl或类似的东西有关,但我什至不知道从哪里开始。 我的路由在项目中运行良好-我可以调用所有的webapi端点,它们可以正确响应。 任何帮助将非常感激

9
asp.net webapi发布-无法复制xml文件
我有基于此自动生成的帮助的MVC 4.0 WebApi项目。 我的模型类存储在解决方案中的另一个项目中。为每个项目启用xml文件的生成(项目属性->构建-> OutPut-> XML文档文件-启用)。 在本地调试中一切正常-xml文件已复制到项目目录,我看到了来自其他项目的字段/类的注释。 但是,当我使用发布配置文件(到文件夹)时,xml文件不会复制到输出文件夹。仅复制WebApi主项目中的一个xml文件。所以我看不到其他项目对课程的评论。

26
web-api POST正文对象始终为null
我仍在学习Web API,因此,如果我的问题听起来很愚蠢,请原谅我。 我在我的StudentController: public HttpResponseMessage PostStudent([FromBody]Models.Student student) { if (DBManager.createStudent(student) != null) return Request.CreateResponse(HttpStatusCode.Created, student); else return Request.CreateResponse(HttpStatusCode.BadRequest, student); } 为了测试它是否有效,我使用Google Chrome的扩展程序“ Postman”来构造HTTP POST请求以对其进行测试。 这是我的原始POST请求: POST /api/Student HTTP/1.1 Host: localhost:1118 Content-Type: application/json Cache-Control: no-cache {"student": [{"name":"John Doe", "age":18, "country":"United States of America"}]} student应该是一个对象,但是当我调试应用程序时,API会接收到该student对象,但内容始终是null。

2
为什么我的ClaimsIdentity IsAuthenticated始终为false(对于Web api授权过滤器)?
在一个Web API项目中,我替代了常规的身份验证过程来检查令牌。代码看起来像这样: if ( true ) // validate the token or whatever here { var claims = new List<Claim>(); claims.Add( new Claim( ClaimTypes.Name, "MyUser" ) ); claims.Add( new Claim( ClaimTypes.NameIdentifier, "MyUserID" ) ); claims.Add( new Claim( ClaimTypes.Role, "MyRole" ) ); var claimsIdentity = new ClaimsIdentity( claims ); var principal = …

6
大幅度的错误:冲突的schemaIds:检测到类型A和B重复的schemaIds
使用Web API并使用swashbuckle生成详尽的文档,我在两个不同的命名空间中定义了两个具有相同名称的不同类。当我在浏览器中打开打开页面时,它说 冲突的schemaIds:检测到类型A和B重复的schemaIds。有关可能的解决方法,请参阅配置设置-“ UseFullTypeNameInSchemaIds” 完整讯息: 500:{“消息”:“发生错误。”,“ ExceptionMessage”:“冲突的schemaId:检测到类型A和B的重复的schemaId。请参见配置设置-\” UseFullTypeNameInSchemaIds \“以获取可能的解决方法”,“ ExceptionType Swashbuckle.Swagger.SchemaRegistry.CreateRegistry.CreateInlineSchema(类型)\ r \ n在Swashbuckle.Swagger。“”:“ System.InvalidOperationException”,“ StackTrace”:“在Swashbuckle.Swagger中。 SchemaRegistry.b__1f(JsonProperty prop)\ r \ n位于System.Linq.Enumerable.ToDictionary [TSource,TKey,TElement](IEnumerable 1 source, Func2 keySelector,Func2 elementSelector, IEqualityComparer1比较器)\ r \ n在Swashbuckle.Swagger.SchemaRegistry.CreateObjectSchema(JsonObjectContract jsonContract)\ r \ n在Swashbuckle.Swagger.SchemaRegistry.CreateDefinitionSchema(Type type)\ r \ n在Swashbuckle.Swagger.SchemaRegistry.GetOrRegister(Type type )\ r \ n在Swashbuckle.Swagger.SwaggerGenerator.CreateOperation(ApiDescription apiDesc,SchemaRegistry schemaRegistry)\ r \ n在Swashbuckle.Swagger.SwaggerGenerator.CreatePathItem(IEnumerable 1 …

2
无法在HttpResponseMessage标头上设置Content-Type标头?
我正在使用ASP.NET WebApi创建RESTful API。我正在一个控制器中创建一个PUT方法,代码如下所示: public HttpResponseMessage Put(int idAssessment, int idCaseStudy, string value) { var response = Request.CreateResponse(); if (!response.Headers.Contains("Content-Type")) { response.Headers.Add("Content-Type", "text/plain"); } response.StatusCode = HttpStatusCode.OK; return response; } 当我通过浏览器通过AJAX放置到该位置时,它给了我这个异常: 标头名称滥用。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。 但是Content-Type响应不是完全有效的标头吗?为什么会出现此异常?

5
Roslyn“需要”什么/为什么在Asp.Net的/ bin文件夹中
有一堆相关的问题在此,虽然大部分的答案定义罗斯林和/或提供“修复”一些问题(exe与托管服务提供商等) 我似乎无法追踪的是中的“为什么”和“目的”(也许仅在ASP.Net MVC / Web API的上下文中)/bin/roslyn。 我遇到了类似的问题(托管-.exe限制,支持4.6等),我的“解决方案”是“仅部署到Azure”(当然,一切正常。)但是实际上,这并不能回答: 为什么需要它们? 这是否意味着它们被用于runtime编译(我的大脑指出了这一点,但这是一个完整的猜测/我也许是错的骗子),如该SO帖子所示-除非更正,否则为“它”(下文中有更多介绍)。 似乎“删除软件包”是一个“修复” (根据过去的一些答案),但如果是这样,它(重新)会产生问题 我认为了解这一点将有所帮助-例如,我不能成为唯一看到.exe“需要”的人而扬眉的人。 更新资料 证明“隐藏的宝石”的存在:)我已经读了一遍又一遍...毕竟它已经存在了一段时间了- 但不是评论线程-最初引用的链接(大约在2014年)已由Microsoft和注释不再显示。幸运的是,下面是相关部分。 大错误-一直在盯着我(或至少自从这次交流以来): Dmitry Dzygin 2015年6月2日上午12:53 我已经尝试了NuGet软件包的最新版本,但是加载/执行编译器的方式似乎有所不同。 在v0.2.0.0中,Roslyn编译器将被加载到内存中,从而极大地提高了具有多个* .as * x / *。cshtml文件的未预编译网站的性能。但是,新版本具有一个新/bin/roslyn/csc.exe文件,该文件每个文件执行一次,从而完全删除了上述优化功能..... 金: XMao 2015年6月2日下午1:22 @Dmitry的的工作csc.exe中/bin/Roslyn是调用VBCSCompiler.exe,在同一文件夹它坐落。VBCSCompiler.exe 是执行实际编译工作的过程。如果VBCSCompiler已经在运行,则csc.exe将对其进行重用,因此我们仍将获得所提及的性能改进。 嗯... 更新:10/2017 似乎这与所有时间有关,因此需要进一步更新。 @Donny V下面的答案是一个选择。通过完全编译您的应用程序(包括所有Views(.cshtml/ .vbhtml)),您无需exe在应用程序中使用它。 即使Visual Studio(到今天,VS 2017,令人困惑)仍会/bin/roslyn在Publish过程中创建及其内容,即使设置了“ full compile”,也是如此。 您可以通过测试该排除的/bin/roslyn文件夹,并推动应用程序到你的托管服务提供商时,它的内容。 警告: 如前所述,完全编译您的应用程序意味着您必须重新编译它,即使是View更改级别也是如此。

3
如何在ASP.NET Web API中为Json.NET设置自定义JsonSerializerSettings?
我知道ASP.NET Web API本机使用Json.NET来(反序列化)对象,但是有没有一种方法可以指定要使用的JsonSerializerSettings对象? 例如,如果我想将type信息包括在序列化的JSON字符串中怎么办?通常,我会将设置注入到.Serialize()调用中,但是Web API会以静默方式进行操作。我找不到手动注入设置的方法。

11
如何在WebAPI 2中进行CORS身份验证?
场景很简单,我需要从另一台服务器(不同于API服务器)登录以检索访问令牌。 我Microsoft.Owin.Cors在API服务器上安装了软件包。在Startup.Auth.cs文件中的下public void ConfigureAuth(IAppBuilder app),我添加了 app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 在WebApiConfig.cs中的下public static void Register(HttpConfiguration config),我添加了以下几行: // Cors var cors = new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS"); config.EnableCors(cors); 我还应该改变什么?

6
在输入元素中使用angularjs过滤器
我希望我不会错过doco中任何明显的内容,如果可以的话,我相信有人会帮助您。 我正在使用asp.net webapi返回带有日期字段的DTO。这些使用JSON.Net(格式为'2013-03-11T12:37:38.693')进行序列化。 我想使用过滤器,但是在INPUT元素中,这是否可行?或者我应该创建一个新的过滤器或指令来实现此目的? // this just displays the text value <input ui-datetime type="text" data-ng-model="entity.date" /> // this doesn't work at all <input ui-datetime type="text" data-ng-model="{{entity.date|date:'dd/MM/yyyy HH:mm:ss a'}}" /> // this works fine {{entity.date|date:'dd/MM/yyyy HH:mm:ss a'}} 我缺少任何捷径吗?

3
在WebApi控制器中读取HttpContent
如何在MVC webApi控制器操作中读取PUT请求上的内容。 [HttpPut] public HttpResponseMessage Put(int accountId, Contact contact) { var httpContent = Request.Content; var asyncContent = httpContent.ReadAsStringAsync().Result; ... 我在这里得到空字符串:( 我需要做的是:找出在初始请求中修改/发送的“哪些属性”(这意味着如果该Contact对象具有10个属性,而我只想更新其中2个属性,则发送和对象只有两个属性,像这样的东西: { "FirstName": null, "LastName": null, "id": 21 } 预期的最终结果是 List<string> modified_properties = {"FirstName", "LastName"}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.