标签: asp.net-web-api

通过 HttpClient 登录

我正在使用此代码来使用 ASP.NET MVC 5 WebAPI2。

static async Task RunAsync()
        {
            using (var client = new HttpClient())
            {
               client.BaseAddress = new Uri("http://localhost:52967/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                // New code:
                HttpResponseMessage response = await client.GetAsync("api/Account/Login");
                if (response.IsSuccessStatusCode)
                {
                    var data = await response.Content.ReadAsStringAsync();

                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

AccountController我创建以下方法下

[HttpPost]
        [AllowAnonymous]
        [Route("Login")]
        public HttpResponseMessage Login(string username, string password)
        {
            try
            {
                var identityUser = UserManager.Find(username, password);

                if (identityUser != null)
                {
                    var identity = new ClaimsIdentity(Startup.OAuthOptions.AuthenticationType);
                    identity.AddClaim(new Claim(ClaimTypes.Name, username));

                    AuthenticationTicket ticket = new …
Run Code Online (Sandbox Code Playgroud)

c# httpclient asp.net-web-api

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

使用 POSTMAN 在 Web API 中进行模型绑定后对象为空

我正在尝试学习 Web API 并创建了我的第一个项目,如下所示。我正在使用邮递员测试它。post 方法工作正常,我收到响应消息 - 但控制器收到的 post 操作输入为空。需要做什么才能在控制器中获取 post 值?

using System.Collections.Generic;
using System.Net.Http;
using System.Web.Http;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class ValuesController : ApiController
    {
        List<Comment> comments;

        // GET api/values
        public IEnumerable<Comment> Get()
        {
            return comments;
        }

        // GET api/values/5
        public Comment Get(int id)
        {
            Comment c = comments[id-1];

            if (string.IsNullOrEmpty(c.Description))
            {
                throw new HttpResponseException(System.Net.HttpStatusCode.NotFound);
            }

            return c;
        }

        // POST api/values
        public HttpResponseMessage Post(Comment inputComment)
        {
            Comment c = new Comment();
            if (inputComment != null)
            { …
Run Code Online (Sandbox Code Playgroud)

rest asp.net-web-api postman

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

登录认证后用户为空

使用 Identity Framework 创建了一个 ASP.Net 应用程序。用户认证成功后,System.Web.HttpContext.Current.User.IdentitynullSystem.Web.HttpContext.Current.User.Identity.IsAuthenticatedfalse

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
        switch (result)
        {
            case SignInStatus.Success:
                ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
                UserManager.AddClaim(User.Identity.GetUserId(),new Claim(ClaimTypes.Role,"Admin"));
Run Code Online (Sandbox Code Playgroud)

我需要在身份验证后向经过身份验证的用户添加一些角色。

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

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

另一个操作挂起时异步模块已完成

我正在连接到 Quickbooks api,下载员工信息并将其保存到我的本地数据库。我正在使用 angularjs、webapi 来完成此操作。将信息保存到数据库时出现以下错误。我确实看到所有函数都有 async 和 await。有人可以帮助我为什么我收到这个错误。

错误 :

“/”应用程序中的服务器错误。异步模块或处理程序已完成,而异步操作仍处于挂起状态。

问题发生在下面粘贴的代码段中:

 var candidate = await CandidateLoginBL.AddCandidateByEmployeeAsync(new CandidateLoginBO()
                        {
                            FirstName = e.GivenName,
                            MiddleName = e.MiddleName,
                            LastName = e.FamilyName
          });
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

完整流程如下:

js:

QuickbookModule.factory('QuickbookService', ['$http', function ($http) {

    return {
 getQuickbooksSync: function () {
            return $http({
                url: '/api/QuickbookService/syncQuickbooks',
                method: 'GET',
                params: { IdCompany: sessionStorage.CID }
            });
        }
Run Code Online (Sandbox Code Playgroud)

API控制器:

[HttpGet]
        [Route("syncQuickbooks")]
        public async Task<IHttpActionResult> syncQuickbooks(int IdCompany)
        {
          var result = await QuickbooksBL.FullQuickbooksSync(IdCompany);
          return Ok(result);
        }
Run Code Online (Sandbox Code Playgroud)

QuickbooksBL :

     public static async Task<List<IncompleteEmp>> …
Run Code Online (Sandbox Code Playgroud)

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

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

使用 Windows 身份验证的已启用 CORS ASP.NET Web API 2 应用程序中的预检请求

我有一个在我们的 Intranet 中使用的 Web API 应用程序。我们还使用 Windows 身份验证来限制谁可以访问 Intranet 中的这些 Web API。

此外,我们还有一个 angularJS 应用程序。它使用 WEB API 应用程序。这些应用的领域是不同的。因此我们使用了 CORS。

为了启用 CORS,我们使用了 Microsoft CORS Nuget 包。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.MapHttpAttributeRoutes();

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

        var cors = new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true };
        config.EnableCors(cors);
    }
}
Run Code Online (Sandbox Code Playgroud)

我有两个 WEB API(GET 和 POST)。当我的 UI 加载时,调用 GET API。当用户单击保存按钮时,将调用 POST API。

[RoutePrefix("api/call")]
[Authorize]
public class …
Run Code Online (Sandbox Code Playgroud)

c# cors asp.net-web-api angularjs

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

C# 单元测试 - 无法从 IHttpActionResult 响应中提取内容

我有这个控制器

    [Route("GeocacheAddressObjectList")]
    [HttpPost]
    public async Task<IHttpActionResult> GeocacheAddressObjectList([FromBody] List<GeocacheAddress> addresses)
    {
        //check valid addresses
        if(addresses == null)
        {
            return BadRequest("Invalid addresses. The address list object is null!") as IHttpActionResult;
        }

        ElasticHelper searchHelper = new ElasticHelper(ConfigurationManager.AppSettings["ElasticSearchUri"]);
        List<GeocacheAddress> geocodedAddresses = new List<GeocacheAddress>();

        // check each address in the addresses list against geocache db
        foreach (GeocacheAddress address in addresses)
        {
            var elasticSearchResult = SearchGeocacheIndex(address);

            // found a match
            if (elasticSearchResult.Total != 0)
            {
                SearchProperties standardizedAddressSearch = new SearchProperties();
                standardizedAddressSearch.Size = 1;
                standardizedAddressSearch.From = 0; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net unit-testing asp.net-web-api

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

如何将多个参数传递给 Odata 4 操作(Web Api 2.2 项目的一部分)

我正在尝试使用 odata-4(在 web api 2.2 项目中)创建一个 odata api 端点,我需要在 odata 控制器中使用我的 GET 操作之一来接受多个字符串参数(除了我的属性之外,它们是自定义搜索属性)为其创建 odata 控制器的实体)。

但是到目前为止,我所做的所有试验中,在浏览器中访问特定操作时,我总是遇到一个或其他错误。到目前为止,我还没有能够获得流/语法的有效组合,因此在此处共享查询以获取有关如何实现将多个参数传递给 odata-4 中的 odata 操作如何修复我遇到的错误的建议。

代码如下:

包.配置:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.Mvc" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.OData" version="5.3.1" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="3.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.OData" version="5.1.2" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="3.1.2" targetFramework="net45" />
  <package id="Microsoft.Data.Edm" version="5.6.0" targetFramework="net45" />
  <package id="Microsoft.Data.OData" …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc odata asp.net-web-api asp.net-web-api2

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

如何将字符串参数传递给 DELETE WebAPI 端点

创建新的 ASP.net WebAPi Rest 控制器时,visual studio 添加了这样的 DELETE 操作

// DELETE: api/foo/5
public void Delete(int id)
{
}
Run Code Online (Sandbox Code Playgroud)

我可以成功调用该端点

但是我系统中的“id”是字符串哈希,所以我需要将“id”作为字符串而不是 int 传递,例如

// DELETE: api/foo/58c75babbf61cda99c84af8b
public void Delete(string id)
{
}
Run Code Online (Sandbox Code Playgroud)

但是当我更改此设置时,不再调用 DELETE 操作,并且出现错误 "No HTTP resource was found that matches the request URI "

任何想法为什么?以及如何解决这个问题?

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

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

使用 MVVM 模式的 Asp .NET Web API

我试图了解我应该如何将 MVVM 模式用于 CRUD 操作。目前我的 API 控制器中有如下方法。我的问题是:使用 MVVM 模式,我还应该像那样构建我的 api(例如,访问 DB)吗?还是应该改变?如果没有任何变化,在这种情况下我将实现 ViewModels 以及它们应该如何由 API 管理?我做了一些研究,但对我来说仍然不清楚。

public IHttpActionResult GetProduct(int id)
{
    var product = _context.Products.SingleOrDefault(p => p.Id == id);
    return Ok(product);
}

[HttpPost]
public IHttpActionResult CreateProduct(Product product)
{
    ...
    _context.Products.Add(product);
    _context.SaveChanges();

    return Created(new Uri(Request.RequestUri + "/" + product.Id), product);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Hangfire 后台作业神秘地停止运行

我对 Hangfire 1.4.3.0(WebAPI、SQL 服务器存储)有一个奇怪的问题 - 在作业开始后正好 30 分钟后,hangfire 重新启动它并分配一个新的工作人员。跟踪级别的默认 hangfire 日志记录没有显示任何有用的信息。在我的 Web 应用程序日志中,我只能看到该作业已启动,且 hangfire 数据库中的 State 表显示分配了新工作人员:

Id  JobId   Name    Reason  CreatedAt   Data
27  8   Processing  NULL    2017-05-17 10:34:51.640 {"StartedAt":"2017-05-17T10:34:51.6389278Z","ServerId":"mypc:3332","WorkerNumber":"22"}
28  8   Processing  NULL    2017-05-17 11:04:51.683 {"StartedAt":"2017-05-17T11:04:51.6819303Z","ServerId":"mypc:3332","WorkerNumber":"14"}
Run Code Online (Sandbox Code Playgroud)

但是以前的工人怎么了?我怎样才能找出它停止的原因?

c# jobs background-process asp.net-web-api hangfire

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