Eu queria saber como posso obter a validação de modelo com ASP.NET Web API. Eu tenho meu modelo assim:
public class Enquiry
{
[Key]
public int EnquiryId { get; set; }
[Required]
public DateTime EnquiryDate { get; set; }
[Required]
public string CustomerAccountNumber { get; set; }
[Required]
public string ContactName { get; set; }
}
Em seguida, tenho uma ação Post em meu controlador de API:
public void Post(Enquiry enquiry)
{
enquiry.EnquiryDate = DateTime.Now;
context.DaybookEnquiries.Add(enquiry);
context.SaveChanges();
}
Como adiciono if(ModelState.IsValid)
e, em seguida, manipulo a mensagem de erro para repassar ao usuário?
c#
asp.net-web-api
CallumVass
fonte
fonte
System.Net.Http
,System.Net
System.Web.Http.Controllers
eSystem.Web.Http.Filters
.IncludeErrorDetailPolicy.Always
incluirá os detalhes (correndo o risco de expor os detalhes aos usuários)Talvez não seja o que você estava procurando, mas talvez seja bom para alguém saber:
Se você estiver usando .net Web Api 2, poderá apenas fazer o seguinte:
Dependendo dos erros do modelo, você obtém este resultado:
fonte
Assim, por exemplo:
Isso retornará uma resposta como esta (assumindo JSON, mas o mesmo princípio básico para XML):
É claro que você pode construir seu objeto / lista de erro da maneira que desejar, por exemplo, adicionando nomes de campo, ID de campo etc.
Mesmo que seja uma chamada Ajax "unidirecional", como um POST de uma nova entidade, você ainda deve retornar algo ao chamador - algo que indica se a solicitação foi bem-sucedida ou não. Imagine um site onde seu usuário adicionará algumas informações sobre si mesmo por meio de uma solicitação AJAX POST. E se as informações que eles tentaram inserir não forem válidas - como eles saberão se a ação Salvar foi bem-sucedida ou não?
A melhor maneira de fazer isso é usando os bons e antigos códigos de status HTTP, como
200 OK
e assim por diante. Dessa forma, seu JavaScript pode lidar corretamente com as falhas usando os retornos de chamada corretos (erro, sucesso etc.).Aqui está um bom tutorial sobre uma versão mais avançada deste método, usando um ActionFilter e jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
fonte
enquiry
objeto, mas não diz quais propriedades são inválidas? Portanto, se eu deixar emCustomerAccountNumber
branco, deverá ser exibida a mensagem de validação padrão (o campo CusomterAccountNumber é obrigatório ..)errors.Add(error.ErrorMessage);
paraerrors.Add(error.Exception.Message);
para começar este trabalho para mim.Você pode usar atributos do
System.ComponentModel.DataAnnotations
namespace para definir regras de validação. Consulte Validação do modelo - por Mike Wasson para obter detalhes.Consulte também o vídeo ASP.NET Web API, Parte 5: Validação Personalizada - Jon Galloway
Outras referências
fonte
Ou, se você estiver procurando por uma coleção simples de erros para seus aplicativos ... aqui está minha implementação disso:
A resposta da mensagem de erro será semelhante a:
fonte
Adicione o código abaixo no arquivo startup.cs
fonte
Aqui você pode verificar para mostrar o erro de estado do modelo um por um
}
fonte
C #
...
Javascript
fonte
Tive um problema ao implementar o padrão de solução aceito em que meu
ModelStateFilter
sempre retornariafalse
(e subsequentemente um 400)actionContext.ModelState.IsValid
para determinados objetos de modelo:Aceito apenas JSON, então implementei uma classe de fichário de modelo personalizado:
Que eu registro diretamente após meu modelo via
fonte
Você também pode lançar exceções conforme documentado aqui: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
Observe, para fazer o que o artigo sugere, lembre-se de incluir System.Net.Http
fonte