创建post web api 2操作

时间:2015-11-01 15:07:40

标签: asp.net-web-api2 asp.net-core-mvc asp.net-web-api-routing

我目前正在尝试做一些应该相当直接的事情,但说实话,目前还远非如此,它让我有点疯狂。

我一直在使用我的WebApi中的Get动作,但是我试图创建Post动作以保持我的mvc控制器清洁但是我不能为我的生活找出原因我的获取操作按预期工作,但我的帖子操作结果为404

using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Mvc;
using TamWeb.Models.api;

namespace TamWeb.Controllers.api
{
    [Authorize]
    [Route("api/[controller]")]
    public class AdminController : Controller
    {
        [HttpPost]
        public bool UpdateDetails([FromBody]DetailsViewModel model)
        {
            return false;
        }
    }
}

using System;

namespace TamWeb.Models.api
{
    public class DetailsViewModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

api控制器就像它获得的一样简单,而且根据其他几个api问题,而不是使用字符串参数,我创建了一个模型对象并遵循其他答案以及我可以找到的消耗过少的文档api如下:

$(function() {
    var firstname = $('#firstName').val();
    var lastname = $('#lastName').val();

    $.ajax({
        url: "api/admin/UpdateDetails",
        type: "POST",
        data: JSON.stringify([firstname, lastname]),
        success: function(data) {
            console.log(data);
        },
        error: function() { console.log("error") }
    });
});

据我可以告诉所有事情"应该"工作,但是小提琴手一直告诉我网址不存在,所以现在我不知道什么是错的。

1 个答案:

答案 0 :(得分:0)

希望我的回答可以帮助您处理您的问题 1.你必须使用的第一个问题" ApiController"相反"控制器"
2. [授权]< - 您必须获取令牌密钥,然后使用它来从webapi获取数据

如下面的代码,我将分享你没有授权的简单代码,我希望它可以解决你的问题 客户代码

$("#read1").click(function () {    
      $.support.cors = true;
      $.ajax({
          crossDomain: true,
          url: 'http://localhost:43520/api/Banners/',
          datatype: "json",
          contenttype: "application/json; charset=utf-8",
          data: { id: 123 },
          type: 'post',          
          error: function (xhr, status, errorThrow) {
              alert(xhr.status);
          },
          success: function (data) {
              alert(JSON.stringify(data));
          }
      });
  });

服务器代码

 // GET: api/Banners/5
        [ResponseType(typeof(Banners))]
        public IHttpActionResult GetBanners(int id)
        {
            Banners banners = db.Banners.Find(id);
            if (banners == null)
            {
                return NotFound();
            }

            return Ok(banners);
        }