Javascript 我用mvc.net编写了一个web api,但是我得到了一个404错误
我的脚本如下所示Javascript 我用mvc.net编写了一个web api,但是我得到了一个404错误,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我的脚本如下所示 $(function () { $(".formSubmit").click(function () { var cName = $('#cName').val(); var cSurname = $('#cSurname').val(); var cEmail = $('#cEmail').val(); var cMessage = $('#cM
$(function () {
$(".formSubmit").click(function () {
var cName = $('#cName').val();
var cSurname = $('#cSurname').val();
var cEmail = $('#cEmail').val();
var cMessage = $('#cMessage').val();
console.log(cMessage);
console.log(cEmail);
console.log(cSurname);
console.log(cName);
if (cName != null && cName != '' && cSurname != null && cSurname != '' && cEmail != null && cEmail != '' && cMessage != null && cMessage != '') {
$.ajax({
type: "GET",
url: "/api/contactusapi/" + cName + "/" + cSurname + "/" + cEmail + "/" + cMessage + "/?",
contentType: "json",
dataType: "json",
success: function (data) {
if (data != null) {
}
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
});
});
namespace iskorumacom.Controllers
{
public class ContactUsApiController : ApiController
{
[HttpGet]
public int Get(string cName, string cSurname, string cEmail, string cMessage)
{
try
{
using (Data.DataClassesDataContext dc = new Data.DataClassesDataContext())
{
string cHTML =
"<h3></h3>" +
"<b>Ad:</b> " + cName + "<br />" +
"<b>Soyad :</b> " + cSurname + "<br />" +
"<b>e-Mail :</b> " + cEmail + "<br />" +
"<b>Mesaj :</b> " + cMessage;
using (MailMessage MailMessageLocal = new MailMessage())
{
MailMessageLocal.From =
new MailAddress("m@majorworx.com", cName + " " + cSurname, System.Text.Encoding.UTF8);
MailMessageLocal.To.Add("m@majorworx.com");
MailMessageLocal.Subject = "İletişim Formu Formu";
MailMessageLocal.IsBodyHtml = true;
MailMessageLocal.BodyEncoding = System.Text.Encoding.UTF8;
MailMessageLocal.Body = cHTML;
MailMessageLocal.Priority = MailPriority.High;
using (SmtpClient SmtpClientLocal = new SmtpClient())
{
return -1;
}
}
}
}
catch
{
return 0;
}
}
}
}
我的“contactusapi”api如下所示
$(function () {
$(".formSubmit").click(function () {
var cName = $('#cName').val();
var cSurname = $('#cSurname').val();
var cEmail = $('#cEmail').val();
var cMessage = $('#cMessage').val();
console.log(cMessage);
console.log(cEmail);
console.log(cSurname);
console.log(cName);
if (cName != null && cName != '' && cSurname != null && cSurname != '' && cEmail != null && cEmail != '' && cMessage != null && cMessage != '') {
$.ajax({
type: "GET",
url: "/api/contactusapi/" + cName + "/" + cSurname + "/" + cEmail + "/" + cMessage + "/?",
contentType: "json",
dataType: "json",
success: function (data) {
if (data != null) {
}
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
});
});
namespace iskorumacom.Controllers
{
public class ContactUsApiController : ApiController
{
[HttpGet]
public int Get(string cName, string cSurname, string cEmail, string cMessage)
{
try
{
using (Data.DataClassesDataContext dc = new Data.DataClassesDataContext())
{
string cHTML =
"<h3></h3>" +
"<b>Ad:</b> " + cName + "<br />" +
"<b>Soyad :</b> " + cSurname + "<br />" +
"<b>e-Mail :</b> " + cEmail + "<br />" +
"<b>Mesaj :</b> " + cMessage;
using (MailMessage MailMessageLocal = new MailMessage())
{
MailMessageLocal.From =
new MailAddress("m@majorworx.com", cName + " " + cSurname, System.Text.Encoding.UTF8);
MailMessageLocal.To.Add("m@majorworx.com");
MailMessageLocal.Subject = "İletişim Formu Formu";
MailMessageLocal.IsBodyHtml = true;
MailMessageLocal.BodyEncoding = System.Text.Encoding.UTF8;
MailMessageLocal.Body = cHTML;
MailMessageLocal.Priority = MailPriority.High;
using (SmtpClient SmtpClientLocal = new SmtpClient())
{
return -1;
}
}
}
}
catch
{
return 0;
}
}
}
}
您是从ApiController继承的控制器,但您的路由是为MVC控制器配置的
ApiController
,请使用.maphttprote
方法配置路由.MapRoute
方法进行配置,请从控制器继承控制器,而不是从ApiController
继承控制器
/api
。使用.maphttprote
定义路由时,将在routeTemplate中定义/api
,如下所示-
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
namespace iskorumacom.Controllers
{
public class ContactUsApiController : ApiController
{
[HttpGet]
[Route("api/contactus/{cName}/{cSurName}/{cEmail}/{cMessage}")]
public int Get(string cName, string cSurname, string cEmail, string cMessage) {
// Your code
}
}
}
在您的情况下,将WebApiConfig配置为-
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
现在使用url/api/contactusapi?cName=myname&cSurname=myurname&cEmail=mymail&cMessage=mymessage调用api
或者,您也可以将Route
属性添加到您的操作方法中,如下所示-
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
namespace iskorumacom.Controllers
{
public class ContactUsApiController : ApiController
{
[HttpGet]
[Route("api/contactus/{cName}/{cSurName}/{cEmail}/{cMessage}")]
public int Get(string cName, string cSurname, string cEmail, string cMessage) {
// Your code
}
}
}
现在将您的API称为-/API/contactus/myname/myurname/mymail/mymessage
WEBAPİ.CONFİG:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{id2}/{id3}/{id4}/{id5}",
defaults: new {
id = RouteParameter.Optional,
id2 = RouteParameter.Optional,
id3 = RouteParameter.Optional,
id4 = RouteParameter.Optional,
id5 = RouteParameter.Optional
}
);
}
根据@Muzaffer-Galata评论,您应该修改您的url以匹配您的端点,请参见下面的代码片段
$(function () {
$(".formSubmit").click(function () {
var cName = $('#cName').val();
var cSurname = $('#cSurname').val();
var cEmail = $('#cEmail').val();
var cMessage = $('#cMessage').val();
console.log(cMessage);
console.log(cEmail);
console.log(cSurname);
console.log(cName);
//change below
if (cName != null && cName != '' && cSurname != null && cSurname != '' && cEmail != null && cEmail != '' && cMessage != null && cMessage != '') {
$.ajax({
type: "GET",
url: "/api/ContactUsApi/Get?cName=" + cName + "&cSurname=" + cSurname + "&cEmail=" + cEmail + "&cMessage=" + cMessage,
contentType: "json",
dataType: "json",
success: function (data) {
if (data != null) {
}
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
});
});
我们通过@Nikhil Patil解决了这个问题
我的url必须如下所示:
url :"/api/contactusapi/" + cName + "/" + cSurname + "/" + cEmail + "/" + cMessage
谢谢你的评论和帮助 您不应将代码与登录凭据共享。小心点,谢谢。我没有注意到Ajax url有一个api
值。尝试将您的路由url
更改为“api/{controller}/{action}/{id}”
,您可以使用工具(如Postman)更轻松地测试您的api。”/api/contactusapi/get/“+cName+”/“+cSurname+”/“+cEmail+”/“+cMessage+”/?“喜欢吗?”?已尝试,但返回相同的错误尝试:url:“/api/ContactUsApi/Get?cName=“+cName+”&cSurname=“+cSurname+”&cEmail=“+cEmail+”&cMessage=“+cMessage,
谢谢,我更改了route.config,但返回错误,因为我已经在webapi.config中定义了defaultapi。您可以发布RouteConfig和webapConfig吗?您也在使用ApiController或Controller?我在使用apicontroller@Melek,如果您使用ApicController,则使用.MapHttpRoute tin WebApiConfig来配置路由(此处使用名称为'DefaultApi',保持.MapRoute在RouteConfig中的状态(此处使用名称为'Default')).I gues我的路由和webapi的代码是正确的,因为我以前使用过这些配置,它可以工作,但现在我在本地工作。你认为错误可能是由此引起的吗?这应该可以工作,但绝对不是你应该做的。我尝试过,但不幸的是没有工作