簡體   English   中英

應用程序“/”中的服務器錯誤。 HTTP 404.MVC ASP.NET

[英]Server error in application '/'. HTTP 404. MVC ASP.NET

我試圖通過POST操作方法顯示視圖,但是當調用此操作時,它會顯示消息"Server error in application '/'"

The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) may have been removed, renamed, or temporarily unavailable. Please review the URL below and make sure it is spelled correctly.

我已經使用routes.MapMvcAttributeRoutes()為這個方法創建了我各自的視圖。

     [Route("Home/AddPiloto")]
     [Route("AddPiloto")]
     public ActionResult AddPiloto()
     {
         return View();
     }

這是我從 html 表單調用的POST操作,該方法有效並獲取數據, only the view fails.

    [HttpPost]
    public ActionResult AddPiloto(PilotoClass pclass)
    {
        HttpClient httpClient = new HttpClient();
        httpClient.BaseAddress = new Uri("http://localhost:8080/AeronauticaDGAC/");
        var request = httpClient.PostAsync("webresources/conndatabase.piloto/supCreatePost", pclass,
            new JsonMediaTypeFormatter()).Result;
        if (request.IsSuccessStatusCode)
        {
            var resultString = request.Content.ReadAsStringAsync().Result;
            var succes = JsonConvert.DeserializeObject<bool>(resultString);
            ViewBag.Mg = succes;
            return RedirectToAction("AddPiloto");
        }
        ViewBag.Mg = request.StatusCode;
        return RedirectToAction("Index",ViewBag);
    }

最后在這里,我有一個調用此方法POST的典型表單。

        <form action="AddPiloto" method="post">
            <div class="form-group">
                <input class="form-control" type="number" name="id" value="" placeholder="Id" />
                <input id="inp1" class="form-control" type="text" name="nombre" value="" placeholder="Nombre" />
                <input id="inp1" class="form-control" type="text" name="apellido" value="" placeholder="Apellido" />
                <input id="inp1" class="form-control" type="number" name="edad" value="" placeholder="Edad" />
                <hr />
                <input class="btn btn-primary" type="submit" name="button" value="Enviar" />
                <input onclick="limpiarFormulario1()" class="btn btn-danger" type="button" name="button" value="Limpiar" />
            </div>
        </form>

我已經創建了視圖, compilerecompile解決方案, clear the browser cachecheck if the file existsrestart the IIS server ,但對我沒有任何作用,如果有人知道任何可能的解決方案,我將不勝感激。 提前致謝。

All code.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net.Http;
using Newtonsoft.Json;
using AeronauticaClient.Models;
using System.Net.Http.Formatting;

namespace AeronauticaClient.Controllers
{
    [RoutePrefix("Home")]
    [Route("{action}")]
    public class HomeController : Controller
    {
        [Route("~/")]
        [Route("")]
        [Route("Index")]
        [HttpGet]
        public ActionResult Index()
        {
            System.Net.Http.HttpClient CHttp = new HttpClient();
            CHttp.BaseAddress = new Uri("http://localhost:8080/AeronauticaDGAC/");
            var request = CHttp.GetAsync("webresources/conndatabase.piloto/supFindAllGet").Result;
            if (request.IsSuccessStatusCode)
            {
                var resultString = request.Content.ReadAsStringAsync().Result;
                var listado = JsonConvert.DeserializeObject<List<PilotoClass>>(resultString);
                ViewBag.Message = request;
                return View(listado);
            }
            else
            {
                ViewBag.Message = request;
            }
            return View();
        }
        
        [Route("Home/AddPiloto")]
        [Route("AddPiloto")]
        public ActionResult AddPiloto()
        {
            return View();
        }
        
        [HttpPost]
        public ActionResult AddPiloto(PilotoClass pclass)
        {
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri("http://localhost:8080/AeronauticaDGAC/");
            var request = httpClient.PostAsync("webresources/conndatabase.piloto/supCreatePost", pclass,
                new JsonMediaTypeFormatter()).Result;
            if (request.IsSuccessStatusCode)
            {
                var resultString = request.Content.ReadAsStringAsync().Result;
                var succes = JsonConvert.DeserializeObject<bool>(resultString);
                ViewBag.Mg = succes;
                return RedirectToAction("AddPiloto");
            }
            ViewBag.Mg = request.StatusCode;
            return RedirectToAction("Index",ViewBag);
        }
    }
}

Routing code.

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes();
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

當您重定向到索引時,您將ViewBag作為參數傳遞。

return RedirectToAction("Index",ViewBag);

但服務器找不到接收該參數的索引方法,因此引發異常。

  1. 重定向時刪除ViewBag作為參數。

     return RedirectToAction("Index");
  2. 在重定向之前,將ViewBag替換為TempData

     if (request.IsSuccessStatusCode) { var resultString = request.Content.ReadAsStringAsync().Result; var succes = JsonConvert.DeserializeObject<bool>(resultString); TempData["Mg"] = succes; return RedirectToAction("AddPiloto"); } TempData["Mg"] = request.StatusCode; return RedirectToAction("Index");
  3. 要檢索您在上一步中存儲的值,請進一步使用TempData["Mg"]

您需要TempData代替,因為在RedirectToAction之后您將處於新請求中。 由於ViewBag僅適用於相同的請求,重定向后值會丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM