мой сценарий ниже
$(function () {
$(".formSubmit").click(function () {
var cName = $('#cName').val();
var cSurname = $('#cSurname').val();
var cEmail = $('#cEmail').val();
var cMessage = $('#cMessage').val();
console.info(cMessage);
console.info(cEmail);
console.info(cSurname);
console.info(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);
}
});
}
});
});
И мой API "contactusapi" ниже
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("[email protected]", cName + " " + cSurname, System.Text.Encoding.UTF8);
MailMessageLocal.To.Add("[email protected]");
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;
}
}
}
}
и моя папка route.config
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "iskorumacom.Controllers" }
);
}
О, спасибо. я не заметил
Ваш URL-адрес Ajax имеет значение api
. Попробуйте изменить свой route 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,
Я пробовал, но не получилось. Извините..
Ваш контроллер наследуется от ApiController, но ваш маршрут настроен для контроллера MVC.
ApiController
, настройте маршрут, используя метод .MapHttpRoute
..MapRoute
, наследуйте свой контроллер от Controller
вместо ApiController
.Кроме того, в своем URL-адресе вы добавляете /api
после своего хоста и порта. /api
определяется в routeTemplate при определении вашего маршрута с помощью .MapHttpRoute
, как показано ниже:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
В вашем случае настройте свой WebApiConfig как -
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
А теперь вызовите свой API, используя URL /api/contactusapi?cName=myname&cSurname=mysurname&cEmail=myemail&cMessage=mymessage
Или, в качестве альтернативы, вы можете добавить атрибут Route
к своему методу действия, как показано ниже:
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/mysurname/myemail/mymessage
Спасибо, я изменил свой route.config, но возвращаю ошибку, потому что я уже определил defaultapi в webapi.config.
Можете ли вы опубликовать как свой RouteConfig, так и WebApiConfig? Также вы используете ApiController или Controller?
Я использую API-контроллер
@Melek, если вы используете ApiController, используйте .MapHttpRoute tin WebApiConfig для настройки ваших маршрутов (здесь используйте имя как «DefaultApi»), оставьте свой .MapRoute таким, какой он есть в RouteConfig (используйте имя как «по умолчанию» здесь).
Я предполагаю, что мой маршрут и код webapi верны, потому что я использовал эти конфигурации раньше, и это работает, но теперь я работаю локально. Как вы думаете, ошибка может быть вызвана этим?
Как выглядит ваш WebApiConfig? Если ваш routeTemplate "api/{controller}/{id}", вы можете вызвать свой контроллер, используя url = "api/contactusapi/get?cName = " + cName + "&cSurname = " + cSurname + "&cEmail = " + cEmail + "&cMessage = " + cMessage"; Можете ли вы также проверить, какой конечный URL-адрес вызывается на вкладке сети?
Я отредактировал свой ответ, пожалуйста, посмотрите.
он вернул «System.ArgumentException: маршрут« DefaultApi »уже находится в коллекции маршрутизации. Имена перенаправления должны быть уникальными».
Проверьте, где вы уже определили «DefaultApi» в качестве имени маршрута, и измените его на другое. Если это для вашего route.config, измените его на «По умолчанию».
Я изменил значение по умолчанию в Route.Config, но оно не работает.
Давайте продолжим обсуждение в чате.
WEBAPİ.КОНФИГ:
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.info(cMessage);
console.info(cEmail);
console.info(cSurname);
console.info(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
Спасибо за ваш комментарий и помощь!
Вы не должны делиться своим кодом с вашими учетными данными для входа. Будь осторожен.