web-dev-qa-db-fra.com

MVC Controller renvoie une mauvaise requête?

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;    
    }
}
34
Dr Schizo
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "naughty");
71
Ian

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");
    }
}
15
ShankarSangoli

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>

...

10
Massood Khaari

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

  1. renvoyer HttpStatusCodeResult(HttpStatusCode.BadRequest); au cas où l'utilisateur n'a pas fourni la valeur requise

  2. renvoyer HttpNotFound(); au cas où l'utilisateur aurait fourni une valeur requise mais non voilé

espérons que cela vous aide

5
Basheer AL-MOMANI

Vous pouvez transmettre un message d'erreur au deuxième paramètre comme suit:

return new HttpResponseMessage(HttpStatusCode.BadRequest, "Your message here");
3
Ekk