2014-07-25 17 views
11

मैं लंबे समय से वेब एपीआई 2 काम करने की कोशिश कर रहा हूं। मैंने इंटरनेट पर बहुत सारे लेख और पोस्ट पढ़े हैं, लेकिन अब तक मैं दुर्भाग्यपूर्ण हूं।वेब एपीआई 2 काम नहीं कर रहा है (404)

मुझे बस काम करने वाली सरल वेब एपीआई विधि प्राप्त करने की आवश्यकता है, लेकिन किसी कारण से मुझे अभी भी 404 विधि नहीं मिल रही है। मैं वास्तव में अब नहीं जानता, जहां समस्या हो सकती है क्योंकि ऐसा लगता है कि सबकुछ ठीक है।

मैंने विशेषताओं, कॉन्फ़िगरेशन आदि के कई बदलावों की कोशिश की है।

Global.asax

AreaRegistration.RegisterAllAreas(); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 

GlobalConfiguration.Configure(WebApiConfig.Register); 

WebApiConfig.cs

config.MapHttpAttributeRoutes(); 

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

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(x => x.MediaType == "application/xml"); 
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

ApiController

public class ContactFormController : ApiController 
{ 
    [Route("~/api/sendemail")] 
    [HttpPost()] 
    public IHttpActionResult SendEmail(ContactFormModel contactForm) 
    { 
     return Ok(); 
    } 
} 

मॉडल::

public class ContactFormModel 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string Subject { get; set; } 
    public string Message { get; set; } 
} 
मैं इस कोड के साथ खत्म हो

jQuery कोड

var jsonData = { "Name": name.val(), "Email": email.val(), "Subject": subject.val(), "Message": comment.val() }; 

$.ajax({ 
    url: "api/sendemail", 
    type: "POST", 
    data: jsonData, 
    cache: false, 

    ... 
}); 

आप देख सकते हैं, यह MVC 5 + जाल एपीआई है 2.

मदद के लिए धन्यवाद। इतना आसान बात और कुछ भी काम नहीं कर रहा है।

उत्तर

20

यहाँ की तरह अपने Global.asax अपडेट करें:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 

} 

और बदल [Route("~/api/sendemail")][Route("/api/sendemail")] मेरे लिए

+3

एपी मार्गों का मूल्यांकन पहले करना चाहिए, या आपको अधिक सख्त एमवीसी मार्ग बनाने की आवश्यकता है (जैसे ढांचा 'एपीकंट्रोलर' की तलाश करने का प्रयास नहीं करता है।) यह एमवीसी 5-विशिष्ट व्यवहार – chemitaxis

+0

नहीं है आप बहुत ही अच्छे हैं !!! यह काम करता है, केवल मुझे सुझाए गए मार्ग से शुरू/हटा देना था [मार्ग ("/ api/sendemail")]। मैं इसे उत्तर के रूप में स्वीकार करूंगा। – Daniel

+0

एक खाली परियोजना से शुरू, मैं फ़िल्टरकॉन्फिग और रूट कॉन्फिग भाग खो रहा था। टेम्पलेट के आधार पर उन वर्गों को जोड़ना चाल था। – Jerther

1

को मार्ग विशेषताओं वेबएपीआई के साथ काम नहीं कर रहे थे, क्योंकि मैं URL पुनर्लेखन मॉड्यूल अपने वेब में स्थापित किया था। config। किसी भी तरह वैश्विक रूटिंग टेम्पलेट्स उस जगह पर काम कर रहे थे लेकिन प्रत्येक वेब विधि के ऊपर रूटिंग विशेषता नहीं। मैंने <rewrite> अनुभाग को 0.अनुभाग में से web.config में हटा दिया और रूटिंग विशेषताओं ने काम करना शुरू कर दिया।

संबंधित मुद्दे