HTTP错误414.使用ActionLink的请求URL太长

时间:2017-12-28 14:55:35

标签: c# asp.net-mvc

在我的页面中,我根据客户的名字,姓氏,历史等创建ActionLinks。 当客户端历史记录太长时,我收到414错误。

public class SearchViewModel
{
    public char[] Alphabet => "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ".ToCharArray();

    public char ClientSearchString { get; set; }
    public List<ClientViewModel> ClientsList { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Dob { get; set; }
    public bool Edit { get; set; }
    public string Address { get; set; }
    public string Job { get; set; }
    public string Mobile { get; set; }
    public string LastVisit { get; set; }
    public string Record { get; set; }
    public string Pit { get; set; }
    public string Er { get; set; }
    public string Ter { get; set; }
    public string History { get; set; }
    public int Id { get; set; }
    public bool OldRecord { get; set; }
}

@foreach (var client in clientList)
{
    if (!string.IsNullOrEmpty(client.LastName))
    {
       <tbody id="rounded-corner">
        <tr id="rounded-corner">
            <td>
                @Html.ActionLink(client.LastName, "DisplayClientDo", "DisplayClient", client, null)
            </td>
            <td>
                @Html.DisplayFor(x => client.FirstName)
            </td>
            <td>
                @Html.DisplayFor(x => client.Dob)
            </td>
            <td>
                @Html.DisplayFor(x => client.Address)
            </td>
            <td>
                @Html.DisplayFor(x => client.Telephone)
            </td>
            <td>
                @Html.DisplayFor(x => client.LastVisit)
            </td>
        </tr>
    </tbody> 
}


public ActionResult DisplayClientDo(ClientViewModel model)
{
    return View("DisplayClient", model);
}

我认为浏览器页面失败了。该URL长约18000个字符(由于历史记录)

this是ActionLink

产生的网址

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

基于pastebin url,您的路径看起来像是从客户端对象中的一个字段作为ID(894值)。通常的建议是只将该ID发送到下一页,并从数据库重新加载历史记录。这样你就不必传递大量可能过时/敏感的数据等。

我会尝试识别作为记录密钥的字段,然后传递它。如果该字段被称为ID,它将是这样的:

@Html.ActionLink(client.LastName, "DisplayClientDo", "DisplayClient", new { client.ID }, null)