мой проект содержит несколько контроллеров WebApi, и каждый из них обычно выполняет три действия: get (guid), post (data) и delete (guid),
Маршрут по умолчанию описан в WebApiconfig
для этого требования. (имя: ControllerAndId
)
Теперь мне нужно реализовать контроллер, который должен обрабатывать различные действия после публикации. Для этого требования я попытался сопоставить другой маршрут с ActionNames
. (имя: ControllerAndActionAndId
)
Поскольку я сопоставил маршрут ControllerAndActionAndId
, невозможно вызвать маршрут удаления «обычного» контроллера (пример: Contactscontroller
).
Все маршруты работают, кроме маршрутов удаления.
StatusCode: 404, ReasonPhrase: 'Not Found'
Существует пример обычно ApiController:
public class ContactsController : ApiController
{
public IEnumerable<Contact> Get()
{
return GetContacts();
}
public HttpResponseMessage Post(Contact contact)
{
SaveContact(contact);
return Request.CreateResponse<Guid>(_code, contact.Id);
}
public void Delete(Guid id)
{
DeleteContact(id);
}
}
Контроллер с ActionName-Route:
public class AttachmentsController : ApiController
{
[HttpGet]
public Attachment Get(Guid attachmentId)
{
return GetAttachment(attachmentId);
}
[HttpPost]
[ActionName("save")]
public HttpResponseMessage Save(AttachmentSaveData saveData)
{
SaveAttachment(saveData);
}
[HttpPost]
[ActionName("remove")]
public HttpResponseMessage Remove(AttachmentDeleteData deleteData)
{
DeleteAttachment(deleteData);
}
}
WebApiConfig:
// Web API routes
config.MapHttpAttributeRoutes();
// Controller with ID
// To handle routes like `/api/VTRouting/route/1`
config.Routes.MapHttpRoute(
name: "ControllerAndActionAndId",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new
{
id = RouteParameter.Optional,
action = RouteParameter.Optional
}
);
// Controller with ID
// To handle routes like `/api/VTRouting/1`
config.Routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Функция удаления ClientAction:
private void Delete(string uri, int id)
{
using (HttpClient _client = new HttpClient())
{
_client.BaseAddress = BaseAddress;
string _url = string.Format("{0}/{1}", uri, id);
var _response = _client.DeleteAsync(_url).Result;
if (!_response.IsSuccessStatusCode)
{
throw new Exception();
}
}
}
В настоящее время я понятия не имею, как решить эту проблему.