我有一個Web API 2項目,並且我試圖用JQuery編寫我的前端。在嘗試獲取用戶(登錄)時,我遇到了問題,坦率地說,有些混淆的行爲。Jquery.ajax請求'獲取'到Web API 2後端不起作用
後端:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Description;
using AngularJSWebApiEmpty.Models;
using System.Web.Script.Serialization;
namespace AngularJSWebApiEmpty.Controllers
{
public class ArtistsController : ApiController
{
private BANDIOappEntities db = new BANDIOappEntities();
public ArtistsController()
{
db.Configuration.ProxyCreationEnabled = false;
}
// GET: api/Artists
public IQueryable<Artist> GetArtists()
{
return db.Artists;
}
// GET: api/Artists/5
[ResponseType(typeof(Artist))]
public Artist Get(string username, string password)
{
Artist artist = null;
artist = (db.Artists.Include("BandMates").Where(x => x.UserName == username && x.Password == password).First<Artist>());
return artist;
}
// PUT: api/Artists/5
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutArtist(int id, Artist artist)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != artist.ArtistId)
{
return BadRequest();
}
db.Entry(artist).State = EntityState.Modified;
try
{
await db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ArtistExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
// POST: api/Artists
[ResponseType(typeof(Artist))]
public async Task<IHttpActionResult> PostArtist(Artist artist)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Artists.Add(artist);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = artist.ArtistId }, artist);
}
// DELETE: api/Artists/5
[ResponseType(typeof(Artist))]
public async Task<IHttpActionResult> DeleteArtist(int id)
{
Artist artist = await db.Artists.FindAsync(id);
if (artist == null)
{
return NotFound();
}
db.Artists.Remove(artist);
await db.SaveChangesAsync();
return Ok(artist);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool ArtistExists(int id)
{
return db.Artists.Count(e => e.ArtistId == id) > 0;
}
}
}
JQuery的
....
$.ajax({
type: 'get',
url: '/api/Artists/5',
data: {"username": login.username, "password": login.password},
success: function (data) {
alert('Success');
},
error: function (data) {
console.log(data);
},
});
記住我本來用Angular.js打,沒有任何問題,這完全相同的API ...
當我運行這在Chrome瀏覽器中,我總是得到'{readyState:0,responseText:「,status:0,statusText:」error「}'。我正在閱讀的所有內容都告訴我這是一個跨域問題,但這不是問題。
然後我決定嘗試使用IE瀏覽器,突然間我沒有收到這個錯誤。但是,不是歸還屬於憑證的藝術家,而是歸還所有藝術家。此外,證書似乎不需要有效,無論我發送什麼,我都會收到所有藝術家。
我對JQuery來說非常新,所以也許這是很容易解決的問題?任何幫助表示讚賞,謝謝!
您是否在發送'$ .ajax'請求之前嘗試過'JSON.stringify'對象? – Filipe
爲什麼你指定'dataType:'jsonp'? –
/api/Artists/5?爲什麼是5?聽起來多了一個參數。嘗試沒有「/ 5」 – Mate