标签: asp.net-web-api

WebApiConfig.Register未运行

我有一个ASP.NET MVC项目*是在VS 2013首次出现时创建的.(旁白:我如何找出用于现有项目的MVC版本?).我现在在VS 2015中打开它并添加了一个Web API 2控制器.

WebApiConfigVS添加了一个静态类.但是,该Register方法未被调用.结果,我的api路线无法识别.

我如何/在哪里调用WebApiConfig.Register方法以及必须传递给此方法的参数是什么?


*这是一个App_Start包含BundleConfig.cs,FilterConfig.cs,IdentityConfig.cs,RouteConfig.cs,StartupAuth.cs,WebApiConfig.cs 的文件夹的版本.

asp.net asp.net-mvc asp.net-web-api

1
推荐指数
1
解决办法
3418
查看次数

使用WEB API和实体框架项目在IIS本地计算机上"基础提供程序无法打开"异常

我有一个Web API 2项目,它与本地IIS Express完美配合,但当我在本地机器IIS上部署时,我收到以下错误:

{
  "Message": "An error has occurred.",
  "ExceptionMessage": "The underlying provider failed on Open.",
  "ExceptionType": "System.Data.Entity.Core.EntityException",
  "StackTrace": "   at System.Data.Entity.Core.EntityClient.EntityConnection.Open()\r\n   at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection()\r\n   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)\r\n   at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass49.<ExecuteFunction>b__47()\r\n   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)\r\n   at System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters)\r\n   at ServiceDBUtility.FamLinkEntities.MBSP_INSERT_ERROR_LOG(String p_ID_USER, String p_ERROR_MSG, String p_ERROR_TRACE, String p_ERROR_TYPE, String p_REQUEST_URL, Nullable`1 p_ERROR_DATE)\r\n   at ServiceDBUtility.Repository.LogRepository.WriteLog(String p_ID_USER, String p_ERROR_MSG, String p_ERROR_TRACE, String p_ERROR_TYPE, String p_REQUEST_URL, Nullable`1 p_ERROR_DATE)\r\n   at ServiceDBUtility.CommonFunctions.WriteLog(String USER_ID, Exception Ex, String reqURL)\r\n   at ServiceDBUtility.CommonFunctions.ThrowException(Exception e, …
Run Code Online (Sandbox Code Playgroud)

c# iis asp.net-web-api

1
推荐指数
1
解决办法
6192
查看次数

将操作添加到默认路由时,路径模板分隔符'/'不能连续出现

我有一个通过OWIN中间件托管的Web API 2项目.一切都运行得很好,我可以按预期调用我的API.但是,我的WebApiConfig定义了默认路由,如下所示:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

因此,我必须使用类似于以下内容的URL调用我的API: /api/values/dosomething

这对我有用,直到我决定记录我的API.为此,我首先尝试使用无效的WebAPI帮助页面包.然后我想我应该尝试Swashbuckle Swagger并看看这是否有助于我完全避免这个问题,但不幸的是,在这两种情况下我都遇到了同样的错误:

路径模板分隔符'/'不能连续出现.它必须由参数或文字值分隔.参数名称:routeTemplate

在尝试了一些事情之后,事实证明,当更改路径模板并删除{action}部件时,错误就消失了.但是,我不能真的这样做,因为整个项目假设URL包含其中的操作方法名称.

所以无论如何,我想知道以下内容:

  1. 为什么这首先发生?
  2. 有没有办法修改这种行为?

提前致谢!

asp.net-web-api swagger asp.net-web-api-helppages asp.net-web-api2 swashbuckle

1
推荐指数
1
解决办法
2714
查看次数

使用ASP.NET WebAPI发布复杂对象

我如何使用WebClientobject发送这样的POST请求:

public static void SaveOrUpdateEntity(string url, object data)
{
    using (var client = new WebClient())
    {
        // TODO
    }
}
Run Code Online (Sandbox Code Playgroud)

data是一个Person对象.

这是控制器方法

[HttpPost]
public void Post([FromBody]Person person)
{
    VeranaWebService.SaveOrUpdatePerson(person);
}
Run Code Online (Sandbox Code Playgroud)

Person班级

public class Person
{
    public string Name { get; set; }
    public string FirstName { get; set; }
    public DateTime? BirthDate { get; set; }
    public byte[] Photo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

1
推荐指数
1
解决办法
5967
查看次数

隐藏名称部分"ACCOUNTS \\"后小写?

我有web方法从这个用户获取用户.User.Identity.Name.string用户名="ACCOUNTS\Ninja.Developer"我想将"ACCOUNTS \"之后的用户名部分转换为小写的用户名="ACCOUNTS \ninja.developer" "

public User GetUser()
{
    var user = new User
    {
        Username = this.User.Identity.Name,<-- convert it here 
        IsAuthenticated = this.User.Identity.IsAuthenticated
    };


    return user;
}
Run Code Online (Sandbox Code Playgroud)

注意:双\不单\

c# asp.net lowercase asp.net-web-api

1
推荐指数
1
解决办法
86
查看次数

通过C#oAuth 2.0 API消耗

我们的客户要求将他们的API与我们为他们开发的网站集成.API身份验证是通过oAuth 2.0完成的.他们提供了所有必要的信息(客户ID,客户端密钥,令牌Uri等).

但是我们很难理解代码片段通过C#调用它.我们知道我们必须请求一个请求令牌并将其附加到头部以便后续请求.我们尝试了DotNetOpenAuth和Owin,但无法找到实现此实际代码/到目前为止没有成功.任何人都可以通过一小段C#代码来帮助我实现这一目标吗?

c# asp.net-mvc oauth-2.0 asp.net-web-api

1
推荐指数
1
解决办法
4222
查看次数

在具有大量流量的异步ASP.NET Web API中,设置ConfigureAwait false会产生什么影响?

我正在研究一种API最终会获得大量流量的新产品.我最初的印象是我想要ConfigureAwait(false)通过我的完整async/ await堆栈设置,但在尝试调试一些后,application insights tracing我发现HttpContext如果我使用的话,其中的某些值会丢失ConfigureAwait(false).

任何具有高流量API经验的人都可以告诉我我可能会遗失的任何其他可能会ConfigureAwait(false)因为用户是否有可能从其他用户的请求接收输出而受到影响?

删除ConfigureAwait(false)我的所有语句会有什么影响API

c# asp.net async-await asp.net-web-api asp.net-web-api2

1
推荐指数
1
解决办法
239
查看次数

复杂的post参数始终为null

当我向后续行动发出请求时

[HttpPost]
public ResponseOutput Incremental(List<Product> inputList)
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

参数inputList始终为null.我的目标:

public class Product
{
    public string ContractNo { get; set; }
    public string Sku { get; set; }
    public double Alis { get; set; }
    public string Kur { get; set; }
    public string SupplierNumber { get; set; }
    public ActionType Islem { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ActionType是枚举.

我的要求机构:

POST /api/Konsinye/ConsigneeInsertIncremental HTTP/1.1
Host: localhost:38664
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 9e5f759c-552d-2e3e-f704-28ec91045e6c

{
 "inputList" : [
    {
      "ContractNo" : "123",
      "Sku" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

1
推荐指数
1
解决办法
68
查看次数

EF6:如何避免循环引用?

在使用ASP.NET Web API进行JSON序列化期间,避免使用Entity Framework 6进行循环引用的可能性有哪些?

我首先为数据库Entity Framework 6生成了edmx(实体数据模型)文件。我尝试使用ASP.NET Web API构建API。当我尝试在控制器中返回JSON对象时,由于循环引用,我遇到了序列化的运行时异常。

确实,当我仔细检查数据库和实体时,我看到一个实体包含一个列表,另一个实体包含了先前实体的列表。假设我有一个包含作者的图书实体,每个作者实体均包含一个图书列表。这在相对数据库中很常见,但无法在JSON序列化中解决(或无法为.NET序列化器解决)。

我不想更改数据库,但已准备好将错误的列表分解为实体或edmx文件。我能做什么?

我尝试过的

我已经尝试过由创建新模型或实体以及使用映射工具(http://www.codeproject.com/Articles/292970/Avoiding-Circular-Reference-for-Entity-in-JSON-Ser或Shawn Wildermuth在Pluralsight上解释的解决方案)。

与实际解决方案相比,此解决方案听起来更像是一种解决方法。它应该在edmx文件或Entity Framework中存在一些内容,以告诉JSON序列化程序哪些会导致循环引用,哪些可以并且必须序列化,哪些不能序列化,对吗?

c# json asp.net-web-api entity-framework-6

1
推荐指数
1
解决办法
9827
查看次数

Web API 2 CORS IIS Express调试和无Access-Control-Allow-Origin标头

空的web.api项目,安装Microsoft.aspnet.webapi.cors 5.2.3,添加

config.EnableCors();
Run Code Online (Sandbox Code Playgroud)

到webapiconfig。使控制器和动作

public class HomeController : ApiController
{
    [EnableCors("*" , "*" , "*")]
    public async Task<string> Get()
    {
        return await Task.FromResult("omg");
    }
}
Run Code Online (Sandbox Code Playgroud)

调试应用程序并加载提琴手,并向http:// localhost:61939 / api / Home发出请求

没有CORS标头。web.config包含:

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
Run Code Online (Sandbox Code Playgroud)

我想念什么?为什么这不会在对Get方法的所有请求中插入Access-Control-Allow-Origin标头?

同样,在web.config中定义CORS的答案也不是答案。在某些时候,我将需要添加原始检查,甚至可能需要检查HTTP方法,例如:

if(requestContext.HttpMethod == "POST" && (origin == "https://someplace.com" || origin == "http://localhost"))
Run Code Online (Sandbox Code Playgroud)

cors iis-express asp.net-web-api iis-10

1
推荐指数
1
解决办法
4359
查看次数