无法调用控制器方法,因链接中的%20s而中断

时间:2014-05-19 15:55:09

标签: c# asp.net-mvc

我有一个MVC5应用程序,我正在研究基本的CRUD功能。我可以创建并且所有写入整齐到Db。但是当我想要“编辑”或“删除”时,它似乎搞得一团糟,因为它会在URL中添加许多%20。但是如果我手动将它们调整到id,它就可以工作。然后我可以调用该方法并显示相应的视图。我在这里缺少什么? 我必须修剪输入,或在Web.Config文件中添加一些东西......?

链接如下所示:

Delete/1%20%20%20%20%20%20%20%20%20

控制器方法:

public ActionResult Delete(string id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Test test = db.Tests.Find(id);
            if (test == null)
            {
                return HttpNotFound();
            }
            return View(test);
        }

        // POST: /Test/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(string id)
        {
            Test test = db.Tests.Find(id);
            db.Tests.Remove(test);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

1 个答案:

答案 0 :(得分:1)

%20是空格字符的HTTP安全编码,因此这里的实际ID是十个字符 - “1”字符后跟九个空格,然后进行编码。

这些空间来自哪里?我的猜测是,在您的数据库中,您已将ID字段声明为长度为10的固定长度字段(即CHAR(10)而不是VARCHAR(10))。您可以将数据库更改为使用可变长度字符串字段,或者如您所说,在写出链接时可以在ID上调用Trim()。