我的项目中有一个Odata控制器类,我需要从其他代码段中调用PUT控制器方法。
我的PUT控制器方法的声明如下所示,它接受两个参数和类对象。
public IHttpActionResult Put([FromODataUri] string name, [FromODataUri] string version, Product product)
我可以通过fiddler使用此URL调用此方法,这很好用,现在我需要通过代码调用此Put控制器方法。
https://127.0.0.1/odata/ControllerName(name='ProductName',version=1)
到目前为止,我编写的代码与Put方法配合使用并从URL接受一个Odata参数,但不确定如何使用两个参数。
Container container = new ProductService.Container(baseUri);
container.AttachTo("Products", product);
container.UpdateObject(product);
container.SaveChanges(SaveChangesOptions.ReplaceOnUpdate);
这里,这将调用Put Controller一个参数,传递参数值等于主键,但因为我有两个主键和相同的两个参数接受Put Controller Method。
我应如何从C#代码调用Put控制器方法?
答案 0 :(得分:0)
这是一个类似的示例项目https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataCompositeKeySample/有POST,PATCH方法:
public HttpResponseMessage PutPerson([FromODataUri] string firstName, [FromODataUri] string lastName, Person person)
{
_repo.UpdateOrAdd(person);
return Request.CreateResponse(HttpStatusCode.OK);
}
以及调用PATCH的示例:
private static void PatchPerson()
{
Console.WriteLine("Patch Person");
Container c = new Container();
var person = c.People.Where(p => p.FirstName == "Eric" && p.LastName == "Smith").Single();
person.Age = 9;
c.UpdateObject(person);
c.SaveChanges(SaveChangesOptions.PatchOnUpdate);
Console.WriteLine("\t{0}, {1}'s age is changed to {2}", person.FirstName, person.LastName, person.Age);
GetPeople();
}
请确保您的实体中有一个复合键,与以下内容相同:
public class Person
{
[Key]
public string FirstName { get; set; }
[Key]
public string LastName { get; set; }
public int Age { get; set; }
}