如何通过浏览器发布Post数据(Int类型的单个参数)的发布请求

时间:2017-06-20 03:19:36

标签: asp.net-mvc asp.net-web-api2 asp.net-mvc-routing restful-url

我在我的Web应用程序中使用Web API 2,该应用程序也使用MVC个人用户帐户。所以所有控制器都有[Authorize]属性。我想测试我的Web API方法,如果它工作正常但我不能使用工具POSTMAN进行测试,因为应用程序的登录功能只是限制。我尝试从邮递员登录到网站,但失败了,那些饼干和所有这些都让我大吃一惊。我想通过从URL本身传递帖子数据来通过浏览器发出该帖子请求。我尝试了多种方法,但似乎我在某处出错了,需要一些帮助。

Routeconfig文件:

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();

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

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

控制器:

namespace GigHub.Controllers
{
    [Authorize]
    public class AttendancesController : ApiController
    {
        private ApplicationDbContext context;
        public AttendancesController()
        {
            context = new ApplicationDbContext();
        }

        [HttpPost]
        [Route("api/Attendances/Attend/{gigId}")]
        public IHttpActionResult Attend([FromBody] int gigId)
        {
            var attendance = new Attendance
            {
                GigId = gigId,
                AttendeeId = User.Identity.GetUserId()
            };
            context.Attendances.Add(attendance);
            context.SaveChanges();

            return Ok();
        }
    }
}

我试过的要求; (1)http://localhost:50702/api/attendances/Attend/5 (2)http://localhost:50702/api/attendances/Attend?gigId=5

当我尝试上述请求时,我收到以下错误。 (1)请求的资源不支持http方法'GET'。 (2)未找到与请求URI匹配的HTTP资源

我遵循了微软的Web API 2教程并搜索了其他资源,但是为了发布数据和测试人们正在使用postman&在表单正文中发送数据。当GetRequest发布params作为查询字符串工作正常时,我们也不能为PostRequest做同样的事情吗?

1 个答案:

答案 0 :(得分:0)

如果你想仍然传递身体并从POSTMAN进行测试,你可以对你的控制器进行一些调整,并且能够实现它。 只需使用[AllowAnonymous]属性标记您的控制器,这将使您的控制器和所有操作方法都可供任何人访问!并且您的控制器看起来与此类似

[AllowAnonymous]
public class AttendancesController : ApiController
{
    private ApplicationDbContext context;
    public AttendancesController()
    {
        context = new ApplicationDbContext();
    }
}

现在你可以做的就是在POSTMAN中提供URL并从中选择POST HTTP METHODS列表和正文中的

{ "gigId" : "<Your Id Here>"}

希望这有帮助!