Получить пользовательское действие
[HttpGet]
[ActionName("Index")]
public ActionResult Get(int id)
{
User u = UserCore.GetUser(id);
if (u == null)
return Content("user not found", "text/plain");
return new XmlResult(u);
}
UserCore.GetUser
public static User GetUser(int UserID)
{
using (PanamaDataContext db = new PanamaDataContext())
{
return (from u in db.Users where u.UserID == UserID select u).FirstOrDefault();
}
}
Маршрут
routes.MapRoute(
"GetUser",
"user/{id}",
new { controller = "Users", action = "Index" }
);
И, наконец, тестовые URL
/ user / 9000 возвращает «пользователь не найден», как и ожидалось (в настоящее время не существует)
/ пользователь / 75 (фактически существует в БД), однако возвращает:
Невозможно получить доступ к удаленному объекту. Имя объекта: 'DataContext доступен
после утилизации. '.
[ObjectDisposedException: невозможно получить доступ к удаленному объекту. объект
name: 'DataContext доступен после Dispose.'.]
System.Data.Linq.DataContext.GetTable (Type type) + 1020550
System.Data.Linq.CommonDataServices.GetDataMemberQuery (MetaDataMember
член, выражение [] keyValues) + 120
System.Data.Linq.DeferredSourceFactory 1.ExecuteKeyQuery(Object[]
keyValues) +258<br>
System.Data.Linq.DeferredSourceFactory
1.Execute (экземпляр объекта) +928
System.Data.Linq.DeferredSource.GetEnumerator () + 53
System.Data.Linq.EntitySet 1.Load() +112<br>
System.Data.Linq.EntitySet
1.get_Count () + 9
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterUser.Write14_User (String
n, строка ns, пользователь o, логическое значение isNullable, логическое значение NeedType) + 5060
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterUser.Write15_User (Объект
о) + 144
[InvalidOperationException: при создании XML произошла ошибка
документ.]
System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter,
Объект o, пространства имен XmlSerializerNamespaces, String encodingStyle,
Идентификатор строки) + 646
System.Xml.Serialization.XmlSerializer.Serialize (TextWriter
textWriter, Object o, пространства имен XmlSerializerNamespaces) + 72
System.Xml.Serialization.XmlSerializer.Serialize (TextWriter
textWriter, объект o) +10 ...
Я предполагаю, что это потому, что указанный объект больше не существует, но что я могу сделать? Каким-то образом скопировать объект, возвращаемый из DataContext?
В любом случае он должен возвращать XML, а не эту ошибку.