PUT Ajax请求返回404未找到asp.net MVC

9 浏览
0 Comments

PUT Ajax请求返回404未找到asp.net MVC

我对asp.net MVC还不熟悉,我正在制作一个类似于Stack Overflow的项目。在这个项目中,我只想使用ajax系统来对答案进行点赞或踩。这样,我就可以在不刷新页面的情况下显示计数器的增加和减少。

我已经使用默认的scaffolding创建了一个名为Question的控制器,并在其中定义了一个QuestionDetails方法,该方法负责返回QuestionDetailsView视图。在这个视图中,当用户点击点赞或踩时,我会向我的API控制器VotesController发送ajax请求。

但是我遇到了这个错误

jquery-3.3.1.js:9600 PUT https://localhost:44389/Question/QuestionDetails/api/votes/3 404 not found
send @ jquery-3.3.1.js:9600
ajax @ jquery-3.3.1.js:9206
(anonymous) @ 2:230
dispatch @ jquery-3.3.1.js:5183
elemData.handle @ jquery-3.3.1.js:4991

这是我的第一个默认scaffolding控制器Question的代码:

public ActionResult QuestionDetails(int Id)
{
    QuestionDetailViewModel questionDetailViewModel = new QuestionDetailViewModel
    {
        Question = QBL.GetQuestions(Id),
        UserId = User.Identity.GetUserId(),
        QuestionId = Id,
    };
    return View(questionDetailViewModel);
}
[HttpPost]
[ValidateInput(false)]
public ActionResult QuestionDetails(QuestionDetailViewModel questionDetailViewModel)
{
    QBL.CreateAnswer(questionDetailViewModel);
    return RedirectToAction("QuestionDetails", new { Id = questionDetailViewModel.QuestionId });
}

视图代码如下:

@model AskMe.Models.ViewModel.QuestionDetailViewModel

@{

ViewBag.Title = "QuestionDetails";

}

Question Details:

@Model.Question.Post.Title

@Html.Raw(Model.Question.Post.Content)


Answers:

@foreach (var answer in Model.Question.Answers)

{

Answered by: @answer.Post.CreatedBy.UserName

@Html.Raw(answer.Post.Content)

}

@using (Html.BeginForm())

{

@Html.AntiForgeryToken()

Contribute your answer:


@Html.ValidationSummary(true, "", new { @class = "text-danger" })

@Html.LabelFor(m => m.AnswerContent, new { @class = "col-md-2 control-label" })

@Html.TextAreaFor(m => m.AnswerContent, new { @class = "form-control" })

@Html.HiddenFor(m => m.UserId)

@Html.HiddenFor(m => m.QuestionId)

}

@section Scripts {

@Scripts.Render("~/bundles/jqueryval");

}

这是我的votes API控制器代码:

using AskMe.Models;
using Microsoft.AspNet.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace AskMe.API
{
    public class VotesController : ApiController
    {
        ApplicationDbContext _context = new ApplicationDbContext();
        [HttpPut]
        public IHttpActionResult UpVote(int postId)
        {
            var userId = User.Identity.GetUserId();
            var user = _context.Users.Find(userId);
            var post = _context.Posts.Find(postId);
            var votes = post.Votes.ToList();
            if (votes.FindAll(u => u.UserId == userId).Count == 0)
            {
                Votes vote = new Votes
                {
                    VotedDateTime = DateTime.Now,
                    UserId = userId,
                    User = user,
                    Post = post,
                    PostId = postId,
                };
                post.Votes.Add(vote);
                _context.SaveChanges();
                return Ok();
            }
            return BadRequest();
        }
    }
}

我不确定我的API链接是应该这样https://localhost:44389/Question/QuestionDetails/api/votes/3还是https://localhost:44389/api/votes/3,而我的路由配置是这样的:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

0
0 Comments

PUT Ajax请求返回404未找到的问题是由于请求的路径不正确导致的。当请求'UpVote'动作时,它会查找"basepath(localhost)/controller/action/Api/etc."路径,但该路径并不存在。因此,我们需要创建正确的请求路径https://localhost:44389/API/Votes/UpVote/3

解决方法:

1. 确保请求的路径是正确的,包括主机名、端口号、控制器名称和动作名称等。

2. 检查API路由配置是否正确,确保路径与控制器和动作名称匹配。

3. 确保控制器中存在对应的动作方法,并且该方法具有正确的参数和返回类型。

4. 确保请求的方式是PUT方法,如果不是,可以尝试更改为PUT方法进行请求。

5. 检查服务器端是否存在相关的资源或数据,如果不存在,可以根据需要进行创建或者修改。

通过以上方法,我们可以解决PUT Ajax请求返回404未找到的问题,并确保请求能够正确地返回所需的数据。

0
0 Comments

PUT Ajax请求返回404 not found asp.net MVC问题的原因可能是Ajax请求中的URL不正确,解决方法是检查URL并确保其与路由配置匹配。

根据提供的信息,可以推断出以下原因和解决方法:

1. 原因:Ajax请求中的URL可能不正确。

解决方法:确保在Ajax调用中包含动作/方法名称,并根据路由配置设置正确的URL。

url: "api/vote/upvote/" + $(this).attr("data-vote-id")

2. 原因:路由配置不正确。

解决方法:检查路由配置,确保其与所需的URL匹配。

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

3. 原因:使用的是MVC5与WebApi。

解决方法:在MVC5中使用WebApi时需要注意。请参考此链接以获取更多信息:[链接](https://stackoverflow.com/questions/26067296)

4. 原因:控制器名称可能是"votes"。

解决方法:确认控制器名称是否为"votes",如果是,则在URL中使用正确的控制器名称。

url: "api/votes/upvote/" + $(this).attr("data-vote-id")

如果出现PUT Ajax请求返回404 not found asp.net MVC的问题,可能是URL不正确或路由配置有误。要解决此问题,需要检查并确保URL正确,并根据需要更新路由配置。

0