我正在使用此代码来使用 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) 我正在尝试学习 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) 使用 Identity Framework 创建了一个 ASP.Net 应用程序。用户认证成功后,System.Web.HttpContext.Current.User.Identity是null和 System.Web.HttpContext.Current.User.Identity.IsAuthenticated是false
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)
我需要在身份验证后向经过身份验证的用户添加一些角色。
我正在连接到 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) 我有一个在我们的 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) 我有这个控制器
[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) 我正在尝试使用 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 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 "
任何想法为什么?以及如何解决这个问题?
我试图了解我应该如何将 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) 我对 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)
但是以前的工人怎么了?我怎样才能找出它停止的原因?
asp.net-web-api ×10
c# ×6
asp.net ×4
asp.net-mvc ×3
angularjs ×2
rest ×2
async-await ×1
cors ×1
hangfire ×1
httpclient ×1
jobs ×1
mvvm ×1
odata ×1
postman ×1
unit-testing ×1