Je me demandais s'il était possible de renvoyer une requête incorrecte avec le contenu d'un contrôleur MVC? La seule façon dont j'ai pu faire cela est de throw HttpException
cependant je ne peux définir aucun contenu ici. J'ai essayé cette approche, mais pour une raison quelconque, je reçois toujours un retour en ordre. Est-il possible de faire cela?
public class SomeController : Controller
{
[HttpPost]
public async Task<HttpResponseMessage> Foo()
{
var response = new HttpResponseMessage(HttpStatusCode.BadRequest);
response.Content = new StringContent("Naughty");
return response;
}
}
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");
Définissez le code d’état Http sur requête incorrecte et utilisez la méthode Content
pour envoyer votre contenu avec la réponse.
public class SomeController : Controller
{
[HttpPost]
public async Task<ActionResult> Foo()
{
Response.StatusCode = 400;
return Content("Naughty");
}
}
En plus de la réponse de @ Ekk, assurez-vous de vérifier ceci:
ne requête incorrecte ASP.NET + Azure 400 ne renvoie pas de données JSON
Ajoutez l'entrée suivante à votre 'web.config'.
<system.webServer> <httpErrors existingResponse="PassThrough"/> </system.webServer>
...
Bien sûr vous pouvez.
Regarde mon action
// GET: Student/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Student student = db.Students.Find(id);
if (student == null)
{
return HttpNotFound();
}
return View(student);
}
Je pense que c'est la meilleure pratique
renvoyer HttpStatusCodeResult(HttpStatusCode.BadRequest);
au cas où l'utilisateur n'a pas fourni la valeur requise
renvoyer HttpNotFound();
au cas où l'utilisateur aurait fourni une valeur requise mais non voilé
espérons que cela vous aide
Vous pouvez transmettre un message d'erreur au deuxième paramètre comme suit:
return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");