Ich habe Attribut-Routing auf meinem Controller angewendet und es führt zu falscher Aktion. Ich weiß nicht, wo ich falsch liege.ASP.NET-Web-API-Attribut-Routing zu falscher Aktion
Hier ist mein Controller:
using System.Collections.Generic;
using System.Web.Http;
using System.Web.Http.Description;
using System.Linq;
using System;
namespace Iboo.API.Controllers
{
public class ClientsController : ApiController
{
private readonly IClientRepository _repository;
public ClientsController(IClientRepository repository)
{
_repository = repository;
}
// GET: api/Clients
[Route("api/v1/clients")]
public IEnumerable<Client> Get()
{
//code
}
// GET: api/Clients/5
[HttpGet]
[ResponseType(typeof(Client))]
[Route("api/v1/clients/get/{id}")]
public IHttpActionResult GetClientById(int id)
{
//code
}
// GET: api/Clients/5
[HttpGet]
[ResponseType(typeof(string))]
[Route("api/v1/clients/{id}/emailid")]
public IHttpActionResult GetClientEmailId(int id)
{
//code
}
}
}
Ich bin speziell interessiert an der GetClientEmailId Methode. Unten ist mein WebApiConfig
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var container = new UnityContainer();
container.RegisterType<IClientRepository, ClientRepository>(new
HierarchicalLifetimeManager());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Mein Global.asax.cs ist als
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
im Browser folgt Wenn ich http://localhost:54919/api/v1/clients/?id=1/getemailid geben Sie mir http://localhost:54919/api/v1/clients es nehmen, die nicht das, was ich will.
Wenn ich versuche, http://localhost:54919/api/v1/clients/1/getemailid bekomme ich einen 404-Fehler.
Ich bin mir nicht sicher, was ich falsch mache.
Wenn Sie sagen "es funktioniert nicht" ... was meinst du? erhalten Sie einen Fehler? Wenn ja, was sagt es? Ist es ein unerwarteter Ort? wenn ja, wo? – simonlchilds
@Munhu Können wir den Code sehen, der die GetClientEmailId-Methode aufruft? – swatsonpicken
Fragen, die Debugging-Hilfe suchen ("** Warum funktioniert dieser Code nicht?** ") muss das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der notwendig ist, um es ** in der Frage selbst zu reproduzieren. ** Fragen ohne ** eine klare Problemaussage ** sind für andere Leser nicht nützlich : Wie erstelle ich ein [mcve]. – Nkosi